1、位置变量
位置变量指的是脚本(或者函数)后跟的第 n 个参数。我们这里暂时先讨论脚本传参的用法。
位置变量需要使用到形如 $1、$2、$3、$4、$5、$6。其中 $1 表示第一个参数,$2 表示第二个参数,依次往后类推即可,我们来看看使用效果。
1.1、简单的脚本参数传递
先写个简单的脚本
[root@localhost ~]# cat test.sh
#!/bin/bash
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第三个参数:$3"
我们写了这样的一个脚本,一共是传入三个参数,然后在脚本里面分别引用三个参数的值,现在来执行一下。
注意先赋予 x 权限
[root@localhost ~]# ./test.sh 11 22 33
第一个参数:11
第二个参数:22
第三个参数:33
我们使用 ./ 执行的时候,分别在脚本后面传入 11、22、33 这三个数值,然后在脚本内部我们已经提前定义好了引用变量,那么在执行的时候就可以把三个参数的值打印出来。
1.2、位置变量控制
使用 shift 关键字可以实现对位置变量的控制,比如我们写个脚本
[root@localhost ~]# cat test.sh
#!/bin/bash
echo "第一个参数:$1"
shift
echo "第二个参数:$2"
echo "第三个参数:$3"
现在来执行一下,这次我们传入四个参数
[root@localhost ~]# ./test.sh 11 22 33 44
第一个参数:11
第二个参数:33
第三个参数:44
喔?我们发现打印的结果中,第二个参数居然是 33,然而我们传参的时候的 22 这个参数并没有引用到,这就是 shift 的作用,每执行依次 shift 命令,位置变量个数就会减一,而变量值则提前一位。
当然也可以设置移动 n 位,我们不必写上 n 个 shift 命令,而直接使用 shift n 即可,比如:
[root@localhost ~]# cat test.sh
#!/bin/bash
shift 3
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第三个参数:$3"
再来执行一下
[root@localhost ~]# ./test.sh 11 22 33 44 55 66
第一个参数:44
第二个参数:55
第三个参数:66
使用 shift n,那么位置变量向前移动 n 位,因此我们的结果是从第四个参数开始引用的,大家都学会了嘛?
1.3、注意事项
当然小伙伴可能会问 $0 表示什么呢?我们来执行一下看看,还是先写个脚本
[root@localhost ~]# cat test.sh
#!/bin/bash
echo "第 0 个参数:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第三个参数:$3"
执行一下看看
[root@localhost ~]# ./test.sh 11 22 33
第 0 个参数:./test.sh
第一个参数:11
第二个参数:22
第三个参数:33
或者使用 bash 执行看看
第三个参数:33
[root@localhost ~]# bash test.sh 11 22 33
第 0 个参数:test.sh
第一个参数:11
第二个参数:22
第三个参数:33
发现他们两个共同点就是,$0 表示执行的文件名本身,我想这里大家应该都明白了吧?
还有一个注意点就是:我们使用 $1、$2… 像这样的传递的参数引用时,从第 10 个开始我们要加上花括号来调用,比如:${10}、${11},一定要加上花括号!!!