getopts配合case来进行操作时有两个隐含变量:一个是OPTARG,用来取当前选项的值
,另外一个是OPTIND,代表
下一个要处理的元素位置
。
如
test4 -a -b foo -cd bar
1 2 3 4 5
OPTIND是一个特殊的变量,它的初始值是1,每次getopts处
理完一个命令参数后就递增它,得到getopts要处理的下一个参数。
下面的例子可参考:
>cat test4
#!/bin/bash
while getopts "ab:cd:" Option
# b and d take arguments
#
do
case $Option in
a) echo -e "a = $OPTIND";;
b) echo -e "b = $OPTIND $OPTARG";;
c) echo -e "c = $OPTIND";;
d) echo -e "d = $OPTIND $OPTARG";;
esac
done
shift $(($OPTIND - 1))
>sh test4 -a -b foo -cd bar
a = 2
b = 4 foo
c = 4
d = 6 bar
>sh test4 -ab foo
a = 1
b = 3 foo
>sh test4 -a -c
a = 2
c = 3
getopts (Shell内置命令)
处理命令行参数是一个相似而又复杂的事情,为此,C提供了getopt/getopt_long等函数,C++的boost提供了Options库,在shell中,处理此事的是getopts和getopt.
先说一下getopts/getopt的区别吧,getopt是个外部binary文件,而getopts是shell builtin。
[admin@intlqa142055x ~]$ type getopt
getopt is /usr/bin/getopt
[admin@intlqa142055x ~]$ type getopts
getopts is a shell builtin
|
getopts不能直接处理长的选项(如:--prefix=/home等)
关于getopts的使用方法,可以man bash
搜索getopts
getopts 有两个参数,第一个参数是一个字符串,包括字符和“:”,每一个字符都是一个有效的选项,如果字符后面带有“:”,表示这个字符有自己的参数。 getopts从命令中获取这些参数,并且删去了“-”,并将其赋值在第二个参数中,如果带有自己参数,这个参数赋值在“OPTARG”中。
提供getopts的shell内置了OPTARG这个变变,getopts修改了这个变量。
这里变量$OPTARG存储相应选项的参数,
而$OPTIND总是存储原始$*中下一个要处理的元素位置。
while getopts ":a:bc" opt
#第一个冒号表示忽略错误;字符后面的冒号表示该选项必须有自己的参数
代码实例(getopts.sh):
echo $*
while getopts ":a:bc" opt
do
case $opt in
a ) echo $OPTARG
echo $OPTIND;;
b ) echo "b $OPTIND";;
c ) echo "c $OPTIND";;
? ) echo "error"
exit 1;;
esac
done
echo $OPTIND
shift $(($OPTIND - 1))
#通过shift $(($OPTIND - 1))的处理,$*中就只保留了除去选项内容的参数,可以在其后进行正常的shell编程处理了。
echo $0
echo $*
|
执行命令:./getopts.sh -a 11 -b -c
-a 11 -b -c
./getopts.sh
此处为
$*的空值
在编写shell脚本
中
,经常要
处理
一些输入参数,在使用过程
中
发现
getopt
s更加方便,能够很好的
处理
用户输入的参数和参数
值
。
getopt
s用于
处理
用户输入参数,举例说明使用方法:
while
getopt
s :a:b:cdefg opt; do
case $opts in
a) do sth;
......
cde) do another...
getopt
s optstring name [a
rg
...]
optstring列出了对应的shell 脚本可以识别的所有参数。比如:shell script可以识别-a, -f 以及-s参数,则optstring就是afs;如果对应的参数后面还跟随
一个
值
,则在相应的optstring后面加冒号。比如a:fs表示a参数后面会有
一个
值
出现,-a value的形式。另外,
getopt
s执行匹配到a的时候,会
getopt
s optstring name [a
rg
s]
getopt
s is used by shell procedures to parse positional parame-ters. optstring contains the option characters to be recog-nized; if a character is followed by a colo...
getopt
s配合case来进行操作时有两个隐含变量:
一个
是O
PTA
RG
,用来
取
当前
选项
的
值
,另外
一个
是
OPTIN
D,代表
当前
选项
在参数列表
中
的位移。
OPTIN
D是
一个
特殊的变量,它的初始
值
是1,每次
getopt
s
处理
完
一个
命令参数后就递增它,得到
getopt
s要
处理
的下
一个
参数。下面的例子可参考:>cat test4#!/bin/bashwhile
getopt
s "ab:cd:" Opt...
最近在学习《Unix网络编程》vol2时,发现书
中
例子经常使用
一个
命令行解析
getopt
函数,因为函数声明比较特别,根据自己摸索,遂总结出使用方法。
1.
getopt
函数的声明
该函数是由Unix标准库提供的函数,查看命令man 3
getopt
#include <unistd.h>
int
getopt
(int a
rg
c, char * const a
rg
v[], con...
getopt
s是linux系统
中
的
一个
内置变量,一般用在循环
中
。每当执行循环是,
getopt
s都会检查下
一个
命令
选项
,如果这些
选项
出现在option
中
,则表示是合法
选项
,否则不是合法
选项
。并将这些合法
选项
保存在VARIABLE这个变量
中
。
getopt
s还包含两个内置变量,及O
PTA
RG
和
OPTIN
D
O
PTA
RG
就是将
选项
后面的参数(或者描述信息DESCPRITION)保存在这个变量当
中
...
最近一直在Linux下写程序,命令行参数一般都是手动写程序分析
处理
,特别麻烦而求代码也很乱。最近发现有
getopt
()可以帮助进行参数分析,方便了很多。但是发现
一个
问题,
getopt
()每个
选项
只能用o
pta
rg
获得
一个
参数,要是想要获得两个以上的参数就没办法了。在网上查了以下也没有什么特别好的办法。虽然
getopt
_long()可以获得多个参数,但是这个函数需要的参数太多了,不喜欢用。后来看了以
一、
getopt
s命令简介
getopt
s命令是用来解析Shell脚本命令行参数的工具,
getopt
s命令参数包含需要被识别的
选项
字符,如果
选项
字符后面跟着
一个
冒号,则表明该字符
选项
需要
一个
命令行参数(
选项
字符与对应的命令行参数之间以空格分隔)(注意:冒号&问号不能被用作为
选项
字符)。
getopt
s命令每次被调用时,它会将下
一个
选项
字符放置到变量
中
,O
PTA
RG
则可以拿到参数
值
;如果option前面加冒号,则代表忽略错误
1.1 命令使用格式
getopt
s optstring name [a
rg
.