getopt

1 篇文章 0 订阅

getopt
用在shell脚本中,实现自定义长短选项。

#!/usr/bin/env bash

paras=$(getopt -o a,b:,c:: -l help,in:,out:: -n "$0" -- "$@")

#将$@的所有内容按照getopt给出的条件匹配并复制给paras
选项:
-o         #表示短选项
	a      #表示a不带参数
	b:     #表示b必须带参数
	c::    #表示c的参数可选
-l         #表示长选项
	help   #表示help不带参数
	in:    #表示in必须带参数
	out::  #表示out的参数可选
-n name    #表示参数解析错误时,以name为脚本名报错
--         #表示getopt结束位置,分割开$@

“::” 参数可选的选项,短选项和参数之间不能有空格,如下:
[root@server ~]# ./test.sh -a -b 1 -c 2 --in=3 --out=4 --help
-a -b 1 -c 2 --in=3 --out=4 --help
-a -b '1' -c '' --in '3' --out '4' --help -- '2'
[root@server ~]# ./test.sh -a -b 1 -c2 --in=3 --out=4 --help
-a -b 1 -c2 --in=3 --out=4 --help
-a -b '1' -c '2' --in '3' --out '4' --help --

输错没有选项和不带参数的选项时:
./test.sh: invalid option -- 'f'
./test.sh: option requires an argument -- 'b'
-f -a 1 -b
-a -- '1'
#!/bin/bash

paras=$(getopt -o a,b:,c:: -l in:,out::,help -n $0 -- $@)

echo $@
echo $paras
eval set -- "$paras"  #将paras字符串里面的内容重新复制给$1、$2……
echo $@
echo "-----------------------------"
echo $4
echo $5
echo $6
echo "-----------------------------"
while true;
do
    case "$1" in
        -a) echo $1; shift;;
        -b) echo $2; shift 2;;
        -c) echo $2; shift 2;;
        --in) echo $2; shift 2;;
        --out) echo $2; shift 2;;
        --help) echo $1; shift;;
        --) shift; echo $@; break;;
        *) exit;;
    esac
done
echo "-----------------------------"
echo $@

[root@server ~]# ./test.sh -a -b 1 -c 2 --in=3 --out=4 --help aa bb cc
-a -b 1 -c 2 --in=3 --out=4 --help aa bb cc
-a -b '1' -c '' --in '3' --out '4' --help -- '2' 'aa' 'bb' 'cc'
-a -b 1  -c    --in 3  --out 4  --help -- 2 aa bb cc
-----------------------------
-c

--in
-----------------------------
-a
1

3
4
--help
2 aa bb cc
-----------------------------
2 aa bb cc

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值