bash位置参数变量
前面讲过位置参数变量实际是属于系统预定义变量的一种,同样不能修改变量名,作用也是固定的,也不能新增变量。只能修改变量的值。
我们来看看下面常用的位置参数变量。
1、$n:n代表数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号括起来,比如${11}.
那么这个变量的主要作用是做什么呢?我们举例说明:
我们在/root下创建一个一个sh目录,然后进入到这个目录,我们从新创建一个.sh脚本文件,比如ceshi.sh.
然后我们来在这个脚本文件里写一些命令,如图:
也就是分别输出变量0,1,2,3的值。
好保存后我们先赋予这个脚本文件权限,然后来执行一下试试,如图:
大家发现了吧,执行后只输出了变量0的值,也就是命令本身./ceshi.sh,而变量1,2,3是空的,所以没有任何输出。
那么如果我们执行这个脚本的时候添加一下参数再看看,如下:
[root@localhost sh]# ./ceshi.sh 11 22 33
会输出什么结果呢?如图:
就分别输出了我们添加的参数值,什么原理呢?
这正好就是位置参数变量的意义,也就是说我们只让他输出 变量0,变量1,变量2,变量3的值,而只有变量0代表命令本身而输出了,而其他三个是空变量没有输出,所以我们在执行脚本的时候就在命令后面分别跟上三个参数,然后分别由变量1,变量2,变量3来接收,然后执行过程当中就输出了。
也就是说我们人为的给三个变量输入了值。而只有三个变量,如果你在命令后面写四个赋值参数也只能输出三个,因为在脚本里只有三个可以接收参数的变量。
可能大家还是不明白这个位置参数变量怎么用,那么我们来举个实例:
比如我们在刚刚的脚本里这么写:
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+num$2))
echo $sum
这样就有意义了,变量sum的和=变量num1的值+变量num2的值,也就是说如果我们这么写脚本的话,我们就可以把这个脚本当作简单的计算机来用了,当然只能两个数相加。
如图:
当然我们完全不用这么麻烦,我们直接这么写即可,如下:
#!/bin/bash
sum=$(($1+$2))
echo $sum
其实我们学习php的时候的变量传参就是这个道理,以后我们会学到,这里我们只要先理解这个位置参数变量的作用就可以了。
======================
2、$*:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体。
3、$@:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待。
4、$#:这个变量代表命令行中所有参数的个数。
其实$*和$@都代表命令行里的所有参数,我们结合$#来举例说明:
我们再写一个脚本ceshi1.sh
#!/bin/bash
echo $#
echo $*
echo $@
然后我们赋予ceshi1.sh权限后来执行一下这个脚本,并给他多添加一些参数,如图:
$#只输出了参数的个数
$@和$*都输出了参数值,因为我们在执行的时候添加的参数分别传给了变量*和变量@,然后自然就输出了他们的值。
5、$@与 $*的区别
他们的区别就是$*会把所有变量看成一个整体。
$@会把传给他的所有变量分开来看待,我们举例说明一下。
我们再写一个脚本ceshi2.sh
#!/bin/bash
for i in “$*”
#$*中的所有参数看成是一个整体,所以这个for循环只会循环一次。
do
echo “The parameters is: $i”
done
x=1
###################################################
for y in “$@”
#$@会把传给他的每个参数都看成是独立的,所以”$@”中有几个参数,就会循环几次。
do
echo “The parameters$x is: $y”
x=$(($x+1))
done
那么这里提到了变量的for循环结构,后面会讲到,这里为了让我们理解$*和$@两个变量的区别。
那么由于$*会把所有参数看成是一个整体,所以无论传递给他多少个参数,他都只循环一次,然后把所有的参数当作值显示在一行。
而$@则会把所有的参数分别看待,所以会依次执行,也就是有几个参数就会循环几次。
然后我们来执行一下这个脚本程序,如图:
大家看出区别了吧,第一循环只输出一次,把所有参数都列在一行上面了。
而第二个循环是有几个参数就循环了几次,分别显示结果。
而其实我们平时用这种传递参数的方法有些不方便,因为这样的脚本只有我们自己知道可以传递几个参数,其他人是不知道的,所以用起来很麻烦。
所以我们传递参数还会用其他的方法,这里大家只要理解这几个位置参数变量的意义就行了。最起码的偶尔用用或者有用位置参数变量写的脚本我们需要看的懂才行。
本教程原创作者:mageo,出自每集博客,尊重作者劳动,转载请注明出处:http://www.ql2015.cn,谢谢!