位置变量:
$0: 获取当前执行shell的文件名称,如果执行脚本带路径那么就包括脚本路径
$n: 获取当前执行的shell脚本的第ng参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9,大括号括起来${10}.
[[email protected] ~]# vim q.sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}
输出的结果
[[email protected] ~]# sh q.sh {a..z}
a b c d e f g h i j k l m n o
$*: 将所有的命令行所有参数视为单个字符串,等同于 “$1$2$3”,"$*"
[email protected]: 将命令行每个参数视为单独的字符串,等同于“$!”"$2" "$2"这是将参数传递给其他程序的最佳方式,因为他会保留所有内嵌在每个参数里的任何空白
注意:上述区别仅限在于加双引号的时候,即“$*”与“[email protected]”
例:[[email protected] ~]# set -- "I am" from HuNan
[[email protected] ~]# echo $#
3
例:
[[email protected] ~]# for i in "$*";do echo $i;done 有双引号的情况下,当做一个参数输出
I am from HuNan
[[email protected] ~]# for i in "[email protected]";do echo $i;done 有双引号的情况下,独立输出
I am
from
HuNan
例 :
[[email protected] ~]# for i;do echo $i;done 去掉in变量列表,相当于in “[email protected]”
I am
from
HuNan
例:
[[email protected] ~]# for i in $*;do echo $i;done 不加双引号,把所有参数输出,然后第一个参数“I am”也拆开了
I
am
from
HuNan
$?: 获取执行上一个指令的返回值(0 为成功,非零为失败) 这个变量很常用
例:
echo $?
$#:获取当前执行的shell脚本后面的参数总个数。
企业案 例控制用户传参个数:
[[email protected] ~]# vim q1.sh
[ $# -ne 2 ] && {
echo "pls input two number"
exit 1 ---->赋值给当前的shell的$?变量了。
}
echo "Thanks!"