我们知道,使用位置变量可以获取传递给脚本的参数,但是位置变量最多只能获取9个参数,当要使用的选项、参数大于9时,位置变量就无能为力了。
一、使用shift命令处理参数
参数操作命令shift的用法比较特殊,它没有选项和参数,直接运行命令即可。运行shift命令时,位置变量就像一个可以移动的“指针”,每执行一次,位置变量指向的参数将向后移动一位。即使用shift命令后,位置变量$1的值等于使用shift命令前$2的值,$2的值等于使用shift命令前$3的值,以此类推。随着shift命令的使用,位置变量$1的值会不断变化,直到移动到最后一个参数之后。
(1)演示shift命令操作位置变量的原理和使用方法的示例脚本:
这个示例脚本会先判断传递给脚本的参数个数是否等于0,如果等于0就调用usage函数输出错误信息并退出。如果参数个数不为0,脚本将使用while循环和shift命令逐一输出所有参数。
[root@localhost shell]# cat shift_param.sh #!/bin/bash #This is a example script. #2013-12-18 function usage() { echo "Error: Must huave a parameter." echo "$0 parameter..." return 1 } if [ $# = 0 ] then usage exit 1 fi I=1 while [ $# != 0 ] do echo "$"$I"="$1 shift I=`expr $I + 1` done exit 0
[root@localhost shell]# ./shift_param.sh 1 2 3 4 5 6 7 8 9 10 $1=1 $2=2 $3=3 $4=4 $5=5 $6=6 $7=7 $8=8 $9=9 $10=10
二、使用shift命令处理选项参数
对于一个脚本编写者而言,脚本参数的含义与命令中的参数含义不同。脚本的参数应该包括类似于命令选项的选项参数,以及脚本需要操作的对象参数,它们都以参数的形式传递给脚本。因此编写脚本时,如果为脚本添加了选项参数,在处理脚本参数时,应该将选项参数和脚本参数分开。
一个典型的处理脚本的选项参数和对象参数的格式如下:
while [ $# -gt 0 ] do case $1 in -a) #功能语句块 #出现选项a时应该执行的语句 shift ;; -b) #功能语句块 #出现选项b时执行的语句 shift ;; -c) #功能语句块 #出现选项c时执行的语句 shift ;; esac done