Shell学习15-向脚本传递参数
时间:2010-08-21 来源:soqsoq
Shell学习15-向脚本传递参数
2010.08
1. shift命令
向脚本传递参数时,有时需要将每一个参数偏移以处理选项,这就是 s h i f t命令的功能。
它每次将参数位置向左偏移一位,下面用一段简单脚本详述其功能。
使用s h i f t命令来处理传递到脚本的每一个参数。
#!/bin/sh
Loop=0
While [ $# -ne 0 ]
Do
Echo $1
Shift
Done
2. 命令行输入的最后一个参数
虽然还没有讲e v a l命令, 如果需要知道命令行中输入的最后一个参数 (通常是一个文件名) ,可以有两种选择:使用命令eval echo \$$#;使用s h i f t命令:shift 'expr $# -2'。
3. getopts
g e t o p t s一般格式为:
getopts option_string variable
g e t o p t s读取o p t i o n _ s t r i n g,获知脚本中使用了有效选项。
g e t o p t s查看所有以连字符开头的参数,将其视为选项,如果输入选项,将把这与o p t i o n _ s t r i n g对比,如果匹配发现,变量设置为 O P T I O N,如果未发现匹配字符,变量能够设置为?。重复此处理过程直到选项输入完毕。
g e t o p t s接收完所有参数后,返回非零状态,意即参数传递成功,变量 O P T I O N保存最后处理参数,一会儿就可以看出处理过程中这样做的好处。
4. 使用getopts指定变量取值
有时有必要在脚本中指定命令行选项取值。 g e t o p t s为此提供了一种方式,即在
o p t i o n _ s t r i n g中将一个冒号放在选项后。例如:
getopts ahfvc: OPTION
上面一行脚本指出,选项 a、h、f、v可以不加实际值进行传递,而选项 c必须取值。使用
选项取值时,必须使用变量 O P TA R G保存该值。如果试图不取值传递此选项,会返回一个错误信息。错误信息提示并不明确,因此可以用自己的反馈信息屏蔽它,方法如下:
将冒号放在o p t i o n _ s t r i n g开始部分。
while getopts :ahfgvc: OPTION
#!/bin/sh
ALL=false
HELP=false
FILE=false
VERBOSE=false
COPIES=0
While getopts :ahfgvc: OPTION
Do
Case $OPTION in
a) ALL=true
Echo “ALL is $ALL”
;;
h)HELP=true
echo “HELP is $HELP”
;;
f)FILE=true
echo “FILE is $FILE”
;
v)VERBOSE=true
echo “VERBOSE IS $VERBOSE”
;
c)COPIES=$OPTARG
Echo “COPIES IS $COPIES”
;
\?)
Echo “`basename $0` -[a h f v] –[c values] file” >&2
;
Esac
Done
输入错误的:
$getopt1 –ah –c
输入正确的
$getopt1 –ah –c 3
选 项 含 义
- a 扩展
- c 计数、拷贝
- d 目录、设备
- e 执行
- f 文件名、强制
- h 帮助
- i 忽略状态
- l 注册文件
- o 完整输出
- q 退出
- p 路径
-v 显示方式或版本