位置变量:
如果要向一个shell脚本传递信息,可以使用位置参数完成此功能;参数相关数目传入脚本,此数目可以任意多,但只有前9个可以被访问,使用shift命
令可以改变这个限制;参数从第一个开始,在第九个结束;每个访问参数前要加$符号;第一个参数为0,表示预留保存实际脚本名字;无论脚本是否有参数,此值
均可用.
变量名:
$0,
$1,
$2,
$3,
$4,
$5,
$6,
$7,
$8,
$9
说明:
$0: 表示脚本名称。
$1,$2,…,$9:$1表示向脚本传递的第一个参数,$2表示向脚本传递的第二个参数,…,$9表示向脚本传递的第九个参数.
特殊变量(参数)
shell对一些参数做特殊处理,这些参数只能被引用而不能被赋值.
特定shell变量如下:
$# 传递到脚本的参数个数;
$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个;
$$ 脚本运行的当前进程ID号;
$! 后台运行的最后一个进程的进程ID号;
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数;
$- 显示shell使用的当前选项,与set命令功能相同;
$? 显示最后命令的退出状态.0表示没有错误,其他任何值表明有错误;
示例:
[root@localhost bin]# cat test.sh #!/bin/bash # # # # echo "此脚本的名称$0为:$0" echo "此脚本的第一个位置参数$1为:$1" echo "此脚本的第二个位置参数$2为:$2" echo "此脚本的第三个位置参数$3为:$3" echo "此脚本的第四个位置参数$4为:$4" echo "此脚本的第五个位置参数$5为:$5" echo "此脚本的第六个位置参数$6为:$6" echo "此脚本的第七个位置参数$7为:$7" echo "此脚本的第八个位置参数$8为:$8" echo "此脚本的第九个位置参数$9为:$9" echo "此脚本的第十个位置参数$10为:$10" echo "此脚本的参数的个数为:$#" echo "此脚本的所有参数为$*" echo "此脚本的所有参数为$@"
此脚本输出结果为:
[root@localhost bin]# pos.sh `seq 1 10` 此脚本的名称/root/bin/pos.sh为:/root/bin/pos.sh 此脚本的第一个位置参数1为:1 此脚本的第二个位置参数2为:2 此脚本的第三个位置参数3为:3 此脚本的第四个位置参数4为:4 此脚本的第五个位置参数5为:5 此脚本的第六个位置参数6为:6 此脚本的第七个位置参数7为:7 此脚本的第八个位置参数8为:8 此脚本的第九个位置参数9为:9 此脚本的第十个位置参数10为:10 此脚本的参数的个数为:10 此脚本的所有参数为1 2 3 4 5 6 7 8 9 10 此脚本的所有参数为1 2 3 4 5 6 7 8 9 10
$* 和 $@ 的区别
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。
但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。
下面的例子可以清楚的看到 $* 和 $@ 的区别:
#!/bin/bash
echo "\$*=" $*
echo "\"\$*\"=" "$*"
echo "\$@=" $@
echo "\"\$@\"=" "$@"
echo "print each param from \$*"
for var in $*
do
echo "$var"
done
echo "print each param from \$@"
for var in $@
do
echo "$var"
done
echo "print each param from \"\$*\""
for var in "$*"
do
echo "$var"
done
echo "print each param from \"\$@\""
for var in "$@"
do
echo "$var"
done
执行 ./test.sh "a" "b" "c" "d",看到下面的结果:
$*= a b c d "$*"= a b c d $@= a b c d "$@"= a b c d print each param from $* a b c d print each param from $@ a b c d print each param from "$*" a b c d print each param from "$@" a b c d
原创文章,作者:YOUNG,如若转载,请注明出处:http://www.178linux.com/35639
评论列表(1条)
对各变量总结的很清晰,也通过写脚本加深自己对变量的理解,课堂练习需要认真完成哦,