在编写shell脚本过程中,经常会用到$那几个特殊的变量,这里解释下其作用:
$0
:获取脚本的名称(如果使用./zcy.sh执行脚本,那么为./zcy.sh;如果使用sh zcy.sh执行脚本,那么为zcy.sh)
$1
-$9
:分别表示脚本的第1到第9个参数值(大于9时需要加上大括号例如:${10})
$#
:获取参数的个数
$@
:获取所有参数的值(每个参数视为单独字符串,等同于"$1" "$2" "$3")
$*
:获取所有参数的值(使用双引号括起来"$*"调用时,所有参数视为单个字符串,等同于"$1 $2 $3")
$$
:获取脚本的进程号(PID)
$?
:获取退出码,用来判断上一条命令是否执行成功,正常返回0,异常为非0
1、我们来编写下面这样一个脚本来做测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[root@imzcy ~]# cat zcy.sh #!/bin/bash echo '$0=' "$0" echo '$1=' "$1" echo '$2=' "$2" echo '$3=' "$3" echo '$#=' "$#" echo '$@=' "$@" echo '$*=' "$*" echo '$$=' "$$" echo '$?=' "$?" sleep 10 echo for i in "$*" ; do echo '$*='$i ; done for i in "$@" ; do echo '$@='$i ; done [root@imzcy ~]# |
2、来测试运行,给它加上3个参数,观察及返回结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@imzcy ~]# ./zcy.sh 11 22 33 $0= ./zcy.sh $1= 11 $2= 22 $3= 33 $#= 3 $@= 11 22 33 $*= 11 22 33 $$= 12632 $?= 0 $*=11 22 33 $@=11 $@=22 $@=33 [root@imzcy ~]# |
3、脚本在执行的时候,我们另开一个ssh会话,确认其PID是否为$$返回的值。
1 2 3 |
[root@imzcy ~]# ps -ef |grep zcy.sh |grep -v grep root 12632 12434 0 23:20 pts/0 00:00:00 /bin/bash ./zcy.sh 11 22 33 [root@imzcy ~]# |