getopt命令,shell脚本获取命令行选项参数

功能:主要用于shell脚本中,获取输入脚本的命令行参数

与此类似的还有getopts(bash内置的一个命令)

(此外,C语言中也有这个函数用来获取传入函数的选项参数,但C语言是每次调用都只返回一个选项,自动步调到下一个选项,不使用类似于shell的位置移动shift)

区别:getopt可以获取长选项参数,例如--example=123456789(长选项可以使用=号来附带参数值)这样的选项,同时,还可以获取-example,-test123456789(附带参数)这样的短选项,短选项不能使用=号来附带参数值。

getopts不能获取长选项。

getopt的经典使用是与set配合使用:set -- $(getopt xxxx),例如:set -- $(getopt -o ab:c:: --long along,blong:,clong:: -n 'example.sh' -- "$@")

set --命令将getopt获取的命令行结果赋予$1,$2...等内容。

通过这两个命令的相互组合,可以很轻松的处理shell脚本命令行选项。例如:

#!/bin/bash

#echo $@

#-o或--options选项后面接可接受的短选项,如ab:c::,表示可接受的短选项为-a -b -c,其中-a选项不接参数,-b选项后必须接参数,-c选项的参数为可选的
#-l或--long选项后面接可接受的长选项,用逗号分开,冒号的意义同短选项。
#-n选项后接选项解析错误时提示的脚本名字
ARGS=`getopt -o ab:c:: --long along,blong:,clong:: -n 'example.sh' -- "$@"`
if [ $? != 0 ]; then
    echo "Terminating..."
    exit 1
fi

#echo $ARGS
#将规范化后的命令行参数分配至位置参数($1,$2,...)
eval set -- "${ARGS}"

while true
do
    case "$1" in
        -a|--along) 
            echo "Option a";
            shift
            ;;
        -b|--blong)
            echo "Option b, argument $2";
            shift 2
            ;;
        -c|--clong)
            case "$2" in
                "")
                    echo "Option c, no argument";
                    shift 2  
                    ;;
                *)
                    echo "Option c, argument $2";
                    shift 2;
                    ;;
            esac
            ;;
        --)
            shift
            break
            ;;
        *)
            echo "Internal error!"
            exit 1
            ;;
    esac
done

#处理剩余的参数
for arg in $@
do
    echo "processing $arg"
done

需要注意的是,像上面的-c选项,后面是可接可不接参数的,如果需要传递参数给-c选项,则必须使用如下的方式:

#./getopt.sh -b 123 -a -c456 file1 file2 
Option b, argument 123
Option a
Option c, argument 456
processing file1
processing file2
#./getopt.sh --blong 123 -a --clong=456 file1 file2  
Option b, argument 123
Option a
Option c, argument 456
processing file1
processing file2
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值