linux getopt 命令

148 篇文章 2 订阅

getopt命令是一个在处理命令行选项和参数时非常方便的工具。它能够识别命令行参数,从而在脚本中解析它们时更方便

 

1、命令的格式

getopt命令可以接受一系列任意形式的命令行选项和参数,并自动将它们转换成适当的格式。它的命令格式如下:

getopt optstring parameters

optstring是这个过程的关键所在。它定义了命令行有效的选项字母,还定义了哪些选项字母需要参数值。 首先,在optstring中列出你要在脚本中用到的每个命令行选项字母。然后,在每个需要参数值的选项字母后加一个冒号。getopt命令会基于你定义的optstring解析提供的参数。

[root@master ~]# getopt ab:cd -a -b test1 -cd test2 test3
 -a -b test1 -c -d -- test2 test3

如果想忽略这条错误消息,可以在命令后加-q选项。

[root@master ~]# getopt -q ab:cd -a -b test1 -cde test2 test3
 -a -b 'test1' -c -d -- 'test2' 'test3'

 

2、选项字符串optstring

"a:b:cd::e",这就是一个选项字符串。对应到命令行就是-a ,-b ,-c ,-d, -e 。冒号又是什么呢? 冒号表示参数,一个冒号就表示这个选项后面必须带有参数(没有带参数会报错哦),但是这个参数可以和选项连在一起写,也可以用空格隔开,比如-a123 和-a   123(中间有空格) 都表示123是-a的参数;两个冒号的就表示这个选项的参数是可选的,即可以有参数,也可以没有参数,但要注意有参数时,参数与选项之间不能有空格(有空格会报错的哦),这一点和一个冒号时是有区别的。

 

3、在脚本中使用getopt

可以在脚本中使用getopt来格式化脚本所携带的任何命令行选项或参数,但用起来略微复杂。

方法是用getopt命令生成的格式化后的版本来替换已有的命令行选项和参数。用set命令能够做到。

set命令的选项之一是双破折线(--),它会将命令行参数替换成set命令的命令行值。

然后,该方法会将原始脚本的命令行参数传给getopt命令,之后再将getopt命令的输出传 给set命令,用getopt格式化后的命令行参数来替换原始的命令行参数,看起来如下所示。

set -- $(getopt -q ab:cd "$@")

[root@master ~]# cat hh.sh
#!/bin/b=<F12>h
# Extract command line options & values with getopt
set -- $(getopt -q ab:cd "$@")
while [ -n "$1" ]
do
    case "$1" in
    -a)
        echo "Found the -a option" ;;
    -b)
        param="$2"
        echo "Found the -b option, with parameter value $param"
        shift ;;
    -c)
        echo "Found the -c option" ;;
    -d)
        echo "Found the -d option" ;;
    --)
        shift
        break ;;
     *)
        echo "$1 is not an option" ;;
    esac
    shift
done

count=1
for param in "$@"
do
    echo "Parameter #$count: $param"
    count=$[ $count + 1 ]
done

shift表示对参数左移,默认shift(shift 1),shift n表示参数左移3位,参考:https://blog.csdn.net/zhu_xun/article/details/24796235

if  [ -n str ]表示当串的长度大于0时为真(串非空),参考:https://www.cnblogs.com/ariclee/p/6137456.html

break 跳出循环,break n 跳出指定的第n个封闭的循环,参考:https://www.cnblogs.com/xiaojianblogs/p/8242443.html

 

执行结果

[root@master ~]# sh hh.sh -a -b test -cd test1  test2 test3
Found the -a option
Found the -b option, with parameter value 'test'
Found the -c option
Found the -d option
Parameter #1: 'test1'
Parameter #2: 'test2'
Parameter #3: 'test3'

 

参考:

http://www.jxbh.cn/article/2096.html

https://www.cnblogs.com/qingergege/p/5914218.html

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值