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)

你可能感兴趣的:(Shell)