一、$0, $1, $2,…, $n
$0:这个特殊一点表示命令本身的名字
$1 表示第一个参数
$2:表示第二个参数
$n:表示第n个参数
[root@localhost shell]# cat test01.sh
echo $0
echo $1
echo $2
[root@localhost shell]# ./test01.sh Hello World
./test01.sh
Hello
World
[root@localhost shell]# bash test01.sh Hello World
test01.sh
Hello
World
二、$#
$#:表示实际的参数个数
[root@localhost shell]# cat test02.sh
echo "length is " $#
[root@localhost shell]#bash test02.sh 1 2 aa bb
length is 4
三、$$
$$:表示当前进程的pid
[root@localhost shell]# cat test03.sh
echo "my pid is " $$
[root@localhost shell]# bash test03.sh
my pid is 47282
[root@localhost shell]# echo $$
46946
四、$?
$?:表示上一个命令执行的退出状态(0表示没有错误,其他表示有错误)
[root@localhost shell]# cat test.sh
exit 66
[root@localhost shell]# ./test.sh
[root@localhost shell]# echo $?
66
五、$!
$!:表示最近一个后台执行程序的pid
[root@localhost shell]# sleep 60 &
[1] 47395
[root@localhost shell]# sleep 70 &
[2] 47396
[root@localhost shell]# echo $!
47396
六、其他
$-
使用Set命令设定的Flag一览
$*
所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@
所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$* 与 $@ 区别:
- 相同点:都是引用所有参数。
- 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
七、总结
vim test.sh
#!/bin/sh
echo "number:$#"
echo "scname:$0"
echo "first :$1"
echo "second:$2"
echo ' -----$*'
for i in "$*"; do
echo $i
done
echo ' -----$@'
for i in "$@"; do
echo $i
done
echo "PID:$$"
bash test.sh aa bb cc
参考链接:https://www.runoob.com/linux/linux-shell-passing-arguments.html