在shell脚本中,可以通过$来获取执行脚本命令传过来的参数,比如:
-
$0
获取命令(脚本)本身(如./test.sh 1 2
,则$0=./test.sh
,如source test.sh 1 2
,则$0=test.sh
) -
$1
获取命令行中第1个参数 -
$2
获取命令行中第2个参数 - 以此类推...
-
$#
获取命令行中参数个数 -
$*
获取所有参数 -
$@
与$*
相同,不同点是$*
合并参数为一个参数,$@
则不会合并(相当于获取参数列表)
其余几个特殊的参数:
-
$$
获取脚本运行的当前进程ID号 -
$?
显示上一条命令退出的状态,执行正常则返回0,否则返回非0
代码示例:
编辑脚本文件:test.sh
#!/bin/bash
echo "Shell 传递参数实例!"
echo "\$0 命令(脚本文件)名称:$0"
echo "\$1 第一个参数:$1"
echo "\$2 第二个参数:$2"
echo "\$# 参数个数:$#"
echo "\$* 脚本参数(合并):$*"
echo "\$@ :脚本参数列表(不合并)$@"
echo "\$\$ 当前执行环境进程ID号: $$"
echo "\$! 运行的最后一个进程的ID号:$!"
echo "\$? 上一条命令执行返回状态: $?"
执行:sh test.sh tom jerry jim
,执行结果:
$*
与$@
的区别
测试脚本1:$*
和$@
使用的时候不使用"
#!/bin/bash
echo "测试\$* 和 \$@ 的区别,不使用双引号"
echo "测试\$*,打印参数列表:"
for param in $*
do
echo "$param"
done
echo "测试\$@,打印参数列表:"
for param in $@
do
echo "$param"
done
结果:
执行结果1
测试脚本2:$*
和$@
使用的时候使用"
#!/bin/bash
echo "测试\$* 和 \$@ 的区别,使用双引号"
echo "测试\$*,打印参数列表:"
for param in "$*"
do
echo "$param"
done
echo "测试\$@,打印参数列表:"
for param in "$@"
do
echo "$param"
done
结果:
执行结果2
可见:在不使用双引号("
)的情况下,二者获取的都是参数列表,但是在使用双引号的情况下,$*
会变成一个字符串(合并所有参数作为一个参数了)
网友评论