《1》位置变量
$0 获取当前执行的shell脚本的文件名,如果执行脚本带路径,那么就包括脚本路径。
$n 获取当前执行shell的命令行的第n个参数,当n=0时表示脚本的文件名,如果n>9,用{}将其括起来,参数以空格隔开。
$# 获取当前执行的shell脚本后面接的参数的总个数。
[root@localhost SHELL]# vim test.sh
[root@localhost SHELL]# sh test.sh "how are you" hello
how are you hello 2 test.sh
[root@localhost SHELL]# cat test.sh
echo $1 $2 $# $0
[root@localhost SHELL]#
///////////////////加引号与否
[root@localhost SHELL]# vim test.sh
[root@localhost SHELL]# sh test.sh how are you
how are
[root@localhost SHELL]# sh test.sh "how are you" hello
how are you hello
[root@localhost SHELL]# cat test.sh
echo $1 $2
$*
$@$@ 与 $* 的区别:
$* 将命令行的所有参数视为一个单独的字符串,等同于”$1$2$3”,”$*”$@ 将命令行的每个参数视为单独的字符串,等同于”$1”, “$2”, “$3”.
dirname 与 basename
dirname 获取文件的路径名
basename 获取文件的名称
[root@localhost SHELL]# dirname /root/Desktop/SHELL/test.sh
/root/Desktop/SHELL
[root@localhost SHELL]# basename /root/Desktop/SHELL/test.sh
test.sh
[root@localhost SHELL]#
$0的使用验证:
《2》进程状态变量
$? 获取执行上一个指令的返回值(0表示成功,非0表示失败)
[root@localhost SHELL]# echo $?
0
[root@localhost SHELL]# sh test1.sh
ni hao, ming tian
[root@localhost SHELL]# echo $?
0
[root@localhost SHELL]# cat test1.sh
echo 'ni hao, ming tian'
[root@localhost SHELL]#
$? 的返回值的意义:
0 执行成功
2 权限不够
1~125 执行失败
126 找到该命令了,但是无法执行
127 未找到要运行的命令
大于128 命令被系统强制中断
提示: 在脚本中一般用 exit 数字,在执行脚本后,返回返回值给$?;;;; 在函数里用return 数字 返回返回值给$?
$! 获取执行上一个指令的PID
$$ 获取当前shell的进程号(PID)
[root@localhost SHELL]# sh test1.sh
ni hao, ming tian
[root@localhost SHELL]# echo $$
5964
[root@localhost SHELL]# cat test1.sh
echo 'ni hao, ming tian'
[root@localhost SHELL]#
/////////////////
[root@localhost SHELL]# vim test.sh
[root@localhost SHELL]# sh test.sh &
[2] 7733
[root@localhost SHELL]# cat /tmp/a.pid
7733
[root@localhost SHELL]# cat test.sh
echo $$ >/tmp/a.pid
sleep 200
[root@localhost SHELL]#
$_ 获取在此之前执行的命令或脚本的最后一个参数
[root@localhost SHELL]# ls ./
test1.sh test.sh UNIX.shell范例精解(第4版).pdf
[root@localhost SHELL]# echo $_
./
[root@localhost SHELL]#
//////
[root@localhost SHELL]# cat test.sh
echo $1 $2 $# $0
[root@localhost SHELL]# echo $_
test.sh
[root@localhost SHELL]# sh test.sh hello world
hello world 2 test.sh
[root@localhost SHELL]# echo $_
world
[root@localhost SHELL]#