【Linux学习笔记】28:位置参数变量

来源:互联网 发布:悟空 知乎 编辑:程序博客网 时间:2024/06/07 17:55

本节学习位置参数变量(预定义变量中的一类),位置参数变量可以向Shell脚本中传递各个位置的参数。
这里写图片描述

[1]$n

它最主要的作用是向脚本里传递参数值,假如有这样一个脚本(既没有写东西也没赋予权限,但假设它能用):
这里写图片描述
那么在这样运行脚本时,就会把”./test1.sh”、”11”、”22”分别赋给$0、$1和$2,用这种方式就可以给脚本传值了。
*测试$n

[root@bogon sh]# vi ok.sh

进入编辑器,书写代码:

#!/bin/bashnum1=$1num2=$2sum=$(($num1+$num2))#用$双小括号做求值运算echo $sum

解释执行验证传参:

[root@bogon sh]# bash ok.sh 12 3446

上面的脚本还可以简化:

#!/bin/bashsum=$(($1+$2))echo $sum

用这种方式还存在一个缺陷,就是如果不是脚本的开发者,我怎么知道要向脚本中传递什么顺序、什么样的值,即不了解参数表就没法去使用脚本。所以这种方式更适合给脚本的编写者来用,而不适合去给其它用户,后面会学习read来应对这种情况。

[2]其它位置参数变量

修改脚本:

#!/bin/bashecho "所有参数的个数是 $#"echo "用\$*看到所有的参数是 $*"echo "用\$@看到所有的参数是 $@"

执行结果:

[root@bogon sh]# bash ok.sh 1 2 3 45 jd 12所有参数的个数是 6$*看到所有的参数是 1 2 3 45 jd 12$@看到所有的参数是 1 2 3 45 jd 12

在这个例子中没有看到$*和$@的区别。

[3]$*和$@的区别

$*将所有参数看成一个整体,而$@将参数区别对待,可以用下面这个脚本的for循环来验证:

#!/bin/bashfor i in "$*"        do                echo "\$*: $i"        donefor j in "$@"        do                echo "\$@: $j"        done

执行结果:

[root@bogon sh]# bash ok.sh 1 2 3 45 jd 12$*: 1 2 3 45 jd 12$@: 1$@: 2$@: 3$@: 45$@: jd$@: 12

注意这两个值使用时应当用双引号括起来,否则会发生变化。