Linux getopts --处理命令行参数,并校验有效选项
来源:互联网 发布:铸造合金配料软件 编辑:程序博客网 时间:2024/05/16 12:15
- 如果选项字符串不以:(冒号)开头,名称 将会被设置为 ?(问号)字符,OPTARG. 将被取消设置,并且诊断消息将被写入到标准错误中。
- 如果选项字符串以 :(冒号)开头,名称 将被设为 ? (问号)字符,这是对未知的选项来说的,或者为缺少的所需选项设为:(冒号)字符,OPTARG 将被设置为已查找到的选项字符,并且 标准错误中将不写入任何输出。
- getopts 命令将退出运行,并且返回值大于零,OPTARG 将被设置为第一个非选项参数索引,在这种情况下,如果第一个 - - 参数之前未出现其它非选项参数,将认为它是选项参数,或者如果没有非选项参数,设置为值 $#+1,名称将被设置为? (问号)字符,
- 下列 getopts 命令规定 a、b 和 c 为有效选项,并且选项 a 和 c 带有参数:
getopts a:bc: OPT - 下列 getopts 命令指定 a、b 以及 c 为有效选项, 并且选项 a 和 b 带有参数,而且 getopts 在命令行遇到为定义的选项时,它将 OPT 的值设置为 ?:
getopts :a:b:c OPT - 下列脚本分析和显示其参数:
aflag= bflag= while getopts ab: name do case $name in a) aflag=1;; b) bflag=1 bval="$OPTARG";; ?) printf"Usage: %s: [-a] [-b value] args\n" $0 exit 2;; esac done if [ ! -z "$aflag" ]; then printf "Option -a specified\ n" fi if [ ! -z "$bflag" ]; then printf'Option -b "%s" specified\ n' "$bval" fi shift $(($OPTIND -1)) printf "Remaining arguments are: %s\n" "$*"
getopts 命令
用途
处理命令行参数,并校验有效选项。
语法
getopts 选项字符串 名称 [ 参数 ...]
描述
getopts 命令是 Korn/POSIX shell 的内置命令,用来从参数列表检索选项以及选项参数。选项由一个+(加号)或者是由一个-(减号)后跟一个字符开始。一个既不是以+,也不是以-开始的选项结束选项字符串。每次调用 getopts 命令时,它将下一个选项的值放置在名称内,并将下一个要处理的参数的索引置于 shell 变量 OPTIND 中。一旦调用了shell , OPTIND 将初始化为1。当选项以 +开头,则+ 将预先设为名称中的值。
如果选项字符串中的字符后面带有“:”(冒号),则预期此选项将带有参数。当选项需要选项参数时,getopts 命令就将其置于变量 OPTARG 中。
当查找到选项字符串所不包含的选项字符,或者查找到的选项没有所需的选项参数时:
这种情况被认为是在将参数传递给所调用的应用程序的过程中所检测到的错误,而不是在处理 getopts 命令的过程中所发生的错误;如上所述,写入诊断消息,但退出状态将变为零。
以下任何字符都可以识别选项结尾:特殊选项- -,查找到不以-,或者+为开头的参数,或者遇到错误。
当遇到选项结尾时:
参数
选项字符串
包含 getopts 命令识别的选项字符串。如果字符后带有冒号,则预期选项将带有参数,应该以单独参数的形式提供此参数。可以用空格将选项与参数分隔开。如果选项字符是未知的或者选项参数丢失,则选项字符串中的第一个字符将决定 getopts 命令的行为。
注意:应用程序不应该将问号和冒号字符作为选项字符。使用其它非字母数字的字符会产生不明的结果。
名称
由 getopts 命令对查找到的选项字符设置。
参数 ...
一个或多个被空格分隔的字符串,由 getopts 命令校验是否是合法选项。如果省略参数 ,就使用位置参数。有关位置参数的更多信息,请参见 Korn Shell 中的参数替换。
注意: 一般来说,不必将参数指定为 getopts 命令的一部分,但在进行脚本调试时可能会有所帮助。
退出状态
此命令返回下列出口值:
0
查找到由选项字符串指定的或未指定的选项。
<0
遇到选项结束或发生错误。
示例
在Bash里有以下用途:
optstring option 字符串,会逐个匹配
varname 每次匹配成功的选项
arg 参数列表,没写时它会取命令行参数列表
$OPTIND 特殊变量,option index,会逐个递增
$OPTARG 特殊变量,option argument,不同情况下有不同的值
细则1:当optstring以”:“开头时,getopts会区分invalid option错误和miss option argument错误。
invalid option时,varname会被设成?,$OPTARG是出问题的option;
miss option argument时,varname会被设成:,$OPTARG是出问题的option。
如果optstring不以”:“开头,invalid option错误和miss option argument错误都会使
varname被设成?,$OPTARG是出问题的option。
细则2:当optstring中的字母跟”:“时,表明该option可接参数,参数(argument)放在$OPTARG中;
如果缺参数,且optstring是以”:“开头,则varname的值会是:,$OPTARG是该option,
否则varname的值是?,$OPTARG是该option。(参照细则1)
例子:gg.sh
[root@localhost shel]# cat gg.sh
#gg.sh
#!/bin/bash
while getopts "abc:def:ghi" flag
do
echo "$flag" $OPTIND $OPTARG # 这里$OPTIND 是一个索引序列号,$OPTARG 是选项里所记录的值,无值是为空,默认情况下选项是以空格分隔
done
echo "Resetting"
OPTIND=1 while getopts "abc:def:ghi" flag
do
echo "$flag" $OPTIND $OPTARG
done
[root@localhost shel]# ./gg.sh -ab -c foo -f "foo bar" -h -gde
a 1
b 2
c 4 foo
f 6 foo bar
h 7
g 7
d 7
e 8
Resetting
a 1
b 2
c 4 foo
f 6 foo bar
h 7
g 7
d 7
e 8
上面是显示结果。
如果调整一下所给参数的位置:
[root@localhost shel]# ./gg.sh -abc foo -f "foo bar" -h –gde a 1
b 1
c 3 foo
f 5 foo bar
h 6
g 6
d 6
e 7
Resetting
a 1
b 1
c 3 foo
f 5 foo bar
h 6
g 6
d 6
e 7
- Linux getopts --处理命令行参数,并校验有效选项
- linux getopts命令行参数处理
- getopts命令行参数处理
- getopts命令行参数处理
- getopts命令行参数处理
- getopts命令行参数处理
- getopts命令行参数处理
- getopts命令行参数处理
- getopt/getopts:Bash中命令行选项/参数处理
- 使用 getopts 处理命令行参数
- shell 命令行选项处理方法 getopts
- Shell 处理命令行参数 getopts 和 getopt
- Linux 使用getopts命令获取命令行参数
- getopts读取命令行参数
- linux getopts命令,处理shell脚本参数
- shell脚本中用getopts处理用户输入选项和参数
- shell脚本选项参数处理学习getopts|getopt
- 脚本乐园 shell中getopts命令行参数处理
- 逻辑回归正则化 regularized logistic regression
- 使用Fiddler抓到包后分析
- DOS后台运行程序
- UCOS系统小结
- Linux gcc --Gnu C 编译器
- Linux getopts --处理命令行参数,并校验有效选项
- 软件相关工具
- Android4.4的zygote进程
- 虚拟机Ubuntu Server(宿主Win7)挂载U盘
- 定义回调函数的方法
- Http协议详解
- c++实验2 正整数类
- Bzoj1112:[POI2008]砖块Klo:splay
- java中的类修饰符、成员变量修饰符、方法修饰符