Shell:传递命令行参数
shell脚本文件(t.sh)内容:
#!/bin/bash
echo "脚本文件名:$0"
echo "参数1:$1"
echo "参数2:$2"
echo "参数3:$3"
执行脚本:
chmod +x t.sh #赋予脚本文件可执行权限
./t.sh a 1 #执行脚本文件并向其传递2个参数:
脚本文件名:./t.sh
参数1:a
参数2:1
参数3:
./t.sh a 1 b c #执行脚本文件并向其传递4个参数:
脚本文件名:./t.sh
参数1:a
参数2:1
参数3:b
脚本文件中获取调用者传递的参数用:$n
还有以下特殊情况:
$#
表示传递到脚本的参数个数$*
表示以一个单字符串显示所有向脚本传递的参数。$$
表示脚本运行的当前进程ID号$!
表示后台运行的最后一个进程的ID号$@
与$*
相同,依次返回每个参数。$-
表示Shell使用的当前选项,与set命令功能相同。$?
表示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
#!/bin/bash
echo "参数个数:$#"
echo "\$*显示的:$*"
echo "\$@显示的:$@"
echo "\$\$显示的:$$"
echo "\$!显示的:$!"
echo "\$-显示的:$-"
echo "\$?显示的:$?"
执行:
./t.sh 1 2 a b
参数个数:4
$*显示的:1 2 a b
$@显示的:1 2 a b
$$显示的:6252
$!显示的:
$-显示的:hB
$?显示的:0
$@
和$*
的不同:
#!/bin/bash
for i in "$*"; do
echo $i
done
for i in "$@"; do
echo $i
done
执行:
./t.sh 1 2 a b
1 2 a b
1
2
a
b
注意在使用$*
和$@
时要加引号"
。
参数中有特殊字符的处理,用\转义或用""或’'包裹:
[root@xjb tmp]# cat s.sh
#!/bin/bash
for i in "$@"; do
echo $i
done
[root@xjb tmp]# ./s.sh "sadf" 'da"f' "'d)" d)
-bash: syntax error near unexpected token `)'
[root@xjb tmp]# ./s.sh "sadf" 'da"f' "'d)" d\)
sadf
da"f
'd)
d)