1、位置变量
(1)$0 ==>取文件名
[root@thzzc1994 ~]# cat test.sh
echo $0
[root@thzzc1994 ~]# sh test.sh
test.sh
[root@thzzc1994 ~]# sh ~/test.sh
/root/test.sh
说明:执行脚本时脚本名字前面有路径则$0输出路径。前面有路径则要输出路径。也可用命令dirname和basename取值。
(2)$#和$n
$# ==>取参数的个数
说明:""里只能算一个变量,这里设置三个变量先。
[root@thzzc1994 ~]# set -- "I am" ugly oldboy
[root@thzzc1994 ~]# echo $#
3
[root@thzzc1994 ~]# echo $1
I am
[root@thzzc1994 ~]# echo $2
ugly
[root@thzzc1994 ~]# echo $3
oldboy
(3)$与$@的区别
[root@thzzc1994 ~]# echo $
I am ugly oldboy
[root@thzzc1994 ~]# echo $@
I am ugly oldboy
[root@thzzc1994 ~]# for i in "$*";do echo $i;done
I am ugly oldboy ==>可知$*就只有一个参数
[root@thzzc1994 ~]# for i in "$@";do echo $i;done
I am
ugly
oldboy ==>$@有四个参数
2、进程状态变量
(1)$? 0为成功,非0为失败
[root@thzzc1994 ~]# date
2018年 05月 01日 星期二 18:58:42 CST
[root@thzzc1994 ~]# echo $?
0[root@thzzc1994 ~]# rm /
rm: 无法删除"/": 是一个目录
[root@thzzc1994 ~]# echo $?
1
在企业场景中,$?返回值的用法如下:
①判断命令、脚本或函数等程序是否执行成功
②在脚本中调用exit n,会返回这个数字给$?。
③在函数里,通过return n把这个数字以函数返回值给$?。
(2)$$ 获取进程号
验证方法①:[root@thzzc1994 ~]# cat testPid.sh
echo $$
[root@thzzc1994 ~]# sh testPid.sh &
[3] 3357
[root@thzzc1994 ~]# 3357
[3]+ Done sh testPid.sh ②(推荐):[root@thzzc1994 ~]# su - thzzc [thzzc@thzzc1994 ~]$ echo $$ 2544 [thzzc@thzzc1994 ~]$ kill -9 2544 [root@thzzc1994 ~]# (3)$_ 上个命令的最后一个参数(不止参数,命令也一样,应该是单词就行) [root@thzzc1994 ~]# echo && echo $_
echo [root@thzzc1994 ~]# echo kobe && echo $_ kobe kobe (4)$! 获取上个脚本的进程号 [root@thzzc1994 ~]# cat testPid.sh sleep 100 [root@thzzc1994 ~]# ps -ef |grep testPid root 6557 6311 0 15:48 pts/0 00:00:00 grep testPid [root@thzzc1994 ~]# sh testPid.sh & [1] 6558 [root@thzzc1994 ~]# echo $! 6558 总结:位置变量$0 $n $# $* $@ 5个和进程变量$$ $! $? $_ 4个,都记下来会对shell编程有很大帮助。