管道命令 |
优先级问题: echo $$ | more 会打印当时进程的pid,不会打印子进程的pid
$$符号,比管道的优先级高,bash会先执行,然后在开启子进程。
echo $ BASHPID | more 会先开子进程,然后解释变量。
[root@CentOS6 ~]# echo $$ 1547 [root@CentOS6 ~]# echo $$ | more 1547 [root@CentOS6 ~]# echo $BASHPID | more 1569 [root@CentOS6 ~]#
为什么要这样设计?
这样可以使用非0数字代表不同的错误类型
.sh 文件中
获取变量个数$#
获取第几个数字$n$1 获取第一个如果n为两位数需要使用该方式: ${10}
获取变量列表$*$@
[root@CentOS6 shell]# cat test.shecho $#echo $1echo $2echo ${10}echo $*echo $@
[root@CentOS6 shell]# ./test.sh 1 2 3 4 5 6 7 8 9 10 11 1112101 2 3 4 5 6 7 8 9 10 111 2 3 4 5 6 7 8 9 10 11
环境变量的特质是导出而非共享 父进程export出来,子进程可以使用, 如果子进程修改了,再次使用会变化吗?子进程修改,父进程不会改变,子进程是修改后的值 如果父进程改了,子进程没有退出的情况下值会变化吗?不会 任一方修改,另一方不会发生变化
创建一个环境变量
[root@CentOS6 shell]# export author=upuptop[root@CentOS6 shell]# echo authorauthor
创建子进程[root@CentOS6 shell]# cat exporttest.shecho $authorauthor=pyfysfecho $author
sleep 20
echo $author
前台运行子进程[root@CentOS6 shell]# ./exporttest.shupuptoppyfysfpyfysf
后台运行子进程,打印查看父进程的值是否改变了,在父进程中改变值,等待20秒睡眠,看是否子进程的值变化了[root@CentOS6 shell]# ./exporttest.sh &[1] 1678[root@CentOS6 shell]# upuptoppyfysf
[root@CentOS6 shell]# echo $authorupuptop[root@CentOS6 shell]# author=shaofff[root@CentOS6 shell]# echo $authorshaofff[root@CentOS6 shell]# pyfysf
条件表达式用
[]
括起来,必须要有空格。为什么?因为[
是个命令
需求:实现添加用户功能,用户名和密码相同,输入命令之后一步完成 程序自定义输出
#!/bin/bash
[ $# -eq 0 ] && echo "no args" && exit 3
useradd $1echo $1 | passwd --stdin $1 &> /dev/null
echo "user add ok……"
测试:[root@CentOS6 shell]# vim adduser.sh[root@CentOS6 shell]# chmod +x adduser.sh[root@CentOS6 shell]# ./adduser.sh upuptopuser add ok……[root@CentOS6 shell]# su upuptop[upuptop@CentOS6 shell]$ exitexit