添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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 .