欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-09 14:26:37
...

本节学习位置参数变量(预定义变量中的一类),位置参数变量可以向Shell脚本中传递各个位置的参数。
【Linux学习笔记】28:位置参数变量

[1]$n

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

[root@bogon sh]# vi ok.sh

进入编辑器,书写代码:

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

解释执行验证传参:

[root@bogon sh]# bash ok.sh 12 34
46

上面的脚本还可以简化:

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

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

[2]其它位置参数变量

修改脚本:

#!/bin/bash
echo "所有参数的个数是 $#"
echo "用\$*看到所有的参数是 $*"
echo "用\aaa@qq.com看到所有的参数是 aaa@qq.com"

执行结果:

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

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

[3]$*和$@的区别

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

#!/bin/bash
for i in "$*"
        do
                echo "\$*: $i"
        done

for j in "aaa@qq.com"
        do
                echo "\aaa@qq.com: $j"
        done

执行结果:

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

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