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 $3br/>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编程有很大帮助。