Shell(Bash)位置参数变量 图片看不了?点击切换HTTP 返回上层
其中,$0 代表命令行本身,$1 代表第 1 个参数,$2 代表第 2 个参数,依次类推。当参数个数超过 10 个时,就要用大括号把这个数字括起来,例如,${10} 代表第 10 个参数,${14} 则代表第 14 个参数。举个例子:
[root@localhost ~]# ls anaconda-ks.cfg install.log install.log.syslog
如果执行这样一条命令,则 $0 的值就是 ls 命令本身,$1 的值就是 anaconda-ks.cfg 这个文件,$2 是 install.log 文件,$3 是 install.log.syslog 文件。在 Shell 中可以识别的位置参数变量如表 1 所示。
位置参数变量 | 作 用 |
---|---|
$n | n 为数字,$0 代表命令本身,$1〜$9 代表第 1〜9 个参数,10 以上的参数需要用大括号包含, 如${10} |
$* | 这个变量代表命令行中所有的参数,把所有的参数看成一个整体 |
$@ | 这个变量也代表命令行中所有的参数,不过 $@ 把每个参数区别对待 |
$# | 这个变量代表命令行中所有参数的个数 |
位置参数变量要用于向命令或程序脚本中传递信息,比如,我们想要写一个计算器,要告诉程序应该运算哪个字符,这时就需要通过位置参数变量向脚本中传递数值,命令如下:
[root@localhost ~]# cd sh/
[raot@localhost sh]# vi count.sh
#!/bin/bash
num1=$1
#给num1变量赋值是第一个参数
num2=$2
#给num2变量赋值是第二个参数
sum=$(($num1 + $num2))
#变量sum的和是num1加num2
echo $sum
#打印变量sum的值
[root@localhost sh]# chmod 755 count.sh
#给脚本文件赋予执行权限
[root@localhost sh]#./count.sh 11 22
33
#这个脚本就会把第一个参数和第二个参数相加
[root@localhost sh]# vi parameter.sh
#!/bin/bash
echo "A total of $# parameters"
#使用$#代表所有参数的个数
echo 'The parameters is: $*"
#使用$*代表所有的参数
echo 'The parameters is: $@"
#使用$@也代表所有的参数
[root@localhost sh]# chmod 755 parameter.sh
[root@localhost sh]#./parameter.sh 11 22 33
A total of 3 parameters
#因为输入了三个参数,所以$#显示的值是3
The parameters is: 11 22 33
#输出了所有参数
The parameters is: 11 22 33
#也输出了所有参数
[rootdlocalhost sh]# vi parameter2.sh
#!/bin/bash
for i in "$*"
#定义for循环,in后面有几个值,for就会循环多少次,注意"$*"要用双引号括起来
#每次循环都会把in后面的值赋予变量i
#Shell把“$*”中的所有参数看成一个整体,所以这个for循环只会循环一次
do
echo "The parameters is: $i"
#打印变量$i的值
done
x=0
#定义变量x的值为0
for y in "$@"
#同样,in后面有几个值,for就会循环几次,每次都把值赋予变量y
#因为Shell会把“$@”中的每个参数都看成独立的,所以“$@”中有几个参数,就会循环几次
do
echo "The parameter$x is: $y"
#输出变量y的值
x=$(( $x +1 ))
#让变量x每次循环都加1 ,是为了输出时看得更清楚
done
echo "x is: $x"
[root@localhost sh]# chmod 755 parameter2.sh
[root@localhost sh]#./parameter2.sh 11 22 33
The parameters is: 11 22 33
#这是第一个for的结果,"$*"被看作一个整体,所以只会循环一次
The parameter1 is: 11
The parameter2 is: 22
The parameter3 is: 33
#这是第二个for的结果,“$@”中的每个变量被区别对待,所以会循环三次
x is:3
#x的值是 3,证明循环了三次