一)Shell特殊变量
$0 获取当前执行的shell脚本的文件名
$n 获取当前执行的shell脚本的第n个参数,n为1-9
$* 获取当前shell的所有参数,如果给$*加上双引号,例如"$*" 表示将所有参数视为单个字符串,相当于"$1$2$3"
$#获取当前shell脚本后面接的参数的个数
$@ 将所有参数$1 $2 $3当作单个个体
[root@server01 ~]# for i in "$*";do echo $i;done
I AM handsome oldby
[root@server01 ~]# for i in "$@";do echo $i;done
I AM
handsome
oldby
[root@server01 ~]# for i in $*; do echo $i;done
I
AM
handsome
oldby
[root@server01 ~]# for i;do echo $i;done ----》不加in,相当于$@
I AM
handsome
oldby
案例1:
[ $# -ne 2 ] && { #<==如果执行脚本传参的个数不等于2,
echo "muse two args" #<==则给用户提示正确的用法。
exit 1 #<==由于不满足要求,因此退出脚本,返回值为1。
}
2)Shell进程中的特殊变量
$? 特殊变量功能,获取执行命令后获取返回值
[root@server01 ~]# pwd
/root
[root@server01 ~]# echo $?
0
[root@server01 ~]# ls /root
anaconda-ks.cfg install.log install.log.syslog rsync_server.sh shell_scripts
[root@server01 ~]# echo $?
0-------------》返回0,表示上一个命令的执行时成功的
[root@server01 ~]# cd /test
-bash: cd: /test: No such file or directory
[root@server01 ~]# echo $?
1-------------》上一个命令执行失败
[root@server01 ~]# mkddir /test
-bash: mkddir: command not found
[root@server01 ~]# echo $?
127
[root@server01 ~]# rm -rf /
rm: it is dangerous to operate recursively on `/'
rm: use --no-preserve-root to override this failsafe
[root@server01 ~]# echo $?
1
案例2:
[root@server01 ~]# cd /etc/
[root@server01 etc]# tar zcf /opt/service.tar.gz ./services
[root@server01 etc]# echo $?---》检查备份后$?是否为0
0
[root@server01 ~]# sh a.sh &
[1] 12149
[root@server01 ~]# cat /tmp/a.pid
12149
[root@server01 ~]# kill -USR2 `cat /tmp/a.pid`
-bash: kill: (12149) - No such process
[1]+ Done sh a.sh
[root@server01 ~]# ps -ef|grep a.sh
root 12253 12099 0 05:55 pts/1 00:00:00 grep a.sh