首页 >> 学习 >> Shell脚本编程基础 >> 位置变量
位置变量

本节重要性:★★★★★    本节难度:★★★★★

在开始学习本节之前,我们先来看一个Shell脚本例子。

[peter@ibi-genome shell]$ cat pos_param.sh
#!/bin/bash
echo $0
echo $1
echo $2
[peter@ibi-genome shell]$ sh pos_param.sh
pos_param.sh


[peter@ibi-genome shell]$ sh pos_param.sh a
pos_param.sh
a

[peter@ibi-genome shell]$ sh pos_param.sh a b
pos_param.sh
a
b
[peter@ibi-genome shell]$ sh pos_param.sh a b c
pos_param.sh
a
b

程序pos_param.sh中的$0、$1、$2就是位置变量,其中$0的值是脚本文件名,$1的值是第一个位置参数(也叫命令行参数,因为是运行命令的时候跟在脚本名后面的参数),$2的值是第二个位置参数,以此类推。

位置变量不能直接赋值,其值除了从命令行参数读取,还可以用set命令进行设置:

[peter@ibi-genome shell]$ cat pos_param.sh
#!/bin/bash
echo $0
echo $1
echo $2
set Hello world
echo $1
echo $2
[peter@ibi-genome shell]$ sh pos_param.sh a b
pos_param.sh
a
b
Hello
world

位置参数可以用shift命令移动:

[peter@ibi-genome shell]$ cat pos_param.sh
#!/bin/bash
echo "1:$1 2:$2 3:$3 4:$4 5:$5"
shift
echo "1:$1 2:$2 3:$3 4:$4 5:$5"
shift 2
echo "1:$1 2:$2 3:$3 4:$4 5:$5"
[peter@ibi-genome shell]$ sh pos_param.sh a b c d e
1:a 2:b 3:c 4:d 5:e
1:b 2:c 3:d 4:e 5:
1:d 2:e 3: 4: 5:

上例中,有5个位置参数,Shell脚本中第一个shift命令没有参数,从执行结果看,所有的位置参数向左移动一个位置,第一个位置参数被挤出。下面一个shift命令有1个参数2,所有位置参数向左移动2个位置,最前面两个被挤出(b和c,a已经被上一个shift命令挤出去了)。

利用位置参数可以方便地把Shell脚本执行需要的数据传进程序,这样不用修改程序代码也可以处理不同的数据。如:

[peter@ibi-genome shell]$ cat sum.sh
#!/bin/bash
echo $(($1+$2))
[peter@ibi-genome shell]$ sh sum.sh 2 4
6
[peter@ibi-genome shell]$ sh sum.sh 3 5
8

上面的Shell脚本利用位置参数把数字传递给程序中的位置变量,对两个位置变量进行运算并输出他们的和,这样每次运行只需要提供不同的位置参数(命令行参数)即可。例子中用到的算术运算在后面的内容中还要学习。

<<上一节  下一节>>