python getopts_shell脚本之getopts的使用方法

遇到shell脚本需要收集参数场景,用getopts非常的方便

getopts optstring name [arg...]     例如:getopts "a:fs" OPTION

命令描述:

optstring列出了对应的Shell Script可以识别的所有参数。比如,如果 Shell Script可以识别-a,-f以及-s参数,则optstring就是afs,默认可以不跟值,如果对应的参数后面还跟随一个值,则在相应的optstring后面加冒号。

比如,a:fs 表示a参数后面会有一个值出现,-a value的形式。

另外,getopts执行匹配到a的时候,会把value存放在一个叫OPTARG的Shell Variable当中。

如果 optstring是以冒号开头的,命令行当中出现了optstring当中没有的参数将不会提示错误信息。比如出现没有定义的-x不会报"illegal option -- x"

name表示的是参数的名称,每次执行getopts,会从命令行当中获取下一个参数,然后存放到name当中。如果获取到的参数不在optstring当中列出, 则name的值被设置为?。

命令行当中的所有参数都有一个index,第一个参数从1开始,依次类推。 另外有一个名为OPTIND的Shell Variable存放下一个要处理的参数的index。

注意:optstring 的参数可以在脚本中全部传入,或者不传入

1.getopts 允许把选项堆叠在一起(如 -fs)

2.如要带参数,须在对应选项后加 :(如a后需加参数 a:fs)。此时选项和参数之间至少有一个空白字符分隔,这样的选项不能堆叠。

3、$optind 总是存储原始$*中下一个要处理的元素(不是参数,而是选项)的位置;

optind初值为1,遇到"x",选项不带参数,optind += 1 ;遇到“x:”,带参数的选项,optind += 2;遇到“x::”,可选参数,属于#1和#2之一,GNU扩展实现。

上例中-a参数的位置为1,由于后面有参数11 ,后面需要处理的下一个参数-b的位置为3,所认此出输出

3;同理-f要处理的下一个参数为-s,值为4,-s后面有参数+2,后面要处理的参数为位置为6。

4、使用 getopts 处理参数虽然是方便,但仍然有两个小小的局限:

a.选项参数的格式必须是-d val,而不能是中间没有空格的-dval。

b.所有选项参数必须写在其它参数的前面,因为 getopts 是从命令行前面开始处理,遇到非-开头的参数,或者选项参数结束标记--就中止了,如果中间遇到非选项的命令行参数,后面的选项参数就都取不到了。

c.不支持长选项, 也就是--debug 之类的选项

由getopts为bash内置的一个参数,如果想要使用更强大的功能可以使用系统下的另一个单独命令getopt

cat getopts.sh#!/bin/bash

echo $@  参数列表

while getopts  "a:bc:" opt

do

case $opt in

a)

echo "a $OPTARG $OPTIND"

;;

b)

echo "b  $OPTIND"  #-b后面不要跟参数,否则遇到非选项命令行参数,会结束

;;

c)

echo "c $OPTARG $OPTIND"

;;

?)           #没有的参数,会被存储在?中

echo "error"

exit

esac

done

echo $OPTIND #下一个要处理的参数的位置号

shift $(( $OPTIND-2 ))  #移除前4个

echo $0   #脚本名

echo $*   #参数列表

------------

-a 11 -b -c 6

a 11 3

b  4

c 6 6

6

./getopts.sh

6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值