shell 5参数
1. shell传递参数
我们可以在执行shell脚本时,向脚本传递参数。
$n | n代表数字。$0表示执行的脚本名称,$1表示第1个参数,$2是第2个参数. shell默认支持9个参数,使用shift可以传递更多的参数。 |
$#,${#*},${#@} | 传递到脚本的参数个数 |
$$ | 脚本运行的当前进程的ID号 |
$! | 后台运行的最后一个进程的ID号 |
$? | 显示上个命令的执行情况。0表示没有错误,其他任何值表明有错误。 |
$@ | 一个单字符显示所有向脚本传递的参数 |
$* | 以一个单字符显示所有向脚本传递的参数 |
$- | 显示shell使用的当前选项,与set命令功能相同 |
${*:1:3},${*:$#} | 表示多个参数 |
2. \(@与\)*区别
#!/bin/sh
#$@ vs $*
func1(){
echo \"\$@\"
for d in "$@";do
echo $d
done
}
func1 1 2 '3 4' '"5 6" 7'
func2(){
echo \$@
for d in $@;do
echo $d
done
}
func2 1 2 '3 4' '"5 6" 7'
func3(){
echo \"\$*\"
for d in "$*";do
echo $d
done
}
func3 1 2 '3 4' '"5 6" 7'
func4(){
echo \$*
for d in $*;do
echo $d
done
}
func4 1 2 '3 4' '"5 6" 7'
1 2 '3 4' '"5 6" 7' | $* | $@ |
没有双引号 $*和$@一样,都是按空格分隔打印参数 |
1 2 3 4 "5 6" 7 |
1 2 3 4 "5 6" 7 |
双引号 "$*"一行打印全部参数 "$@"挨个输出参数 |
1 2 3 4 "5 6" 7 | 1 2 3 4 "5 6" 7 |
脚本 | 参数:Tom Cat | 参数:"Tom Cat" |
#!/bin/sh echo "传入参数:$*" echo "第一个参数:$1" echo "参数个数:$#" | 传入参数:Tom Cat 第一个参数:Tom 参数个数:2 | 传入参数:Tom Cat 第一个参数:Tom Cat 参数个数:1 |