getopt命令--用于shell脚本获取命令行选项

本文详细介绍了getopt命令的功能和用法,getopt主要用于shell脚本中处理命令行参数,能够处理长选项和短选项参数,并提供了getopt与getopts的区别。通过示例展示了如何结合set命令来处理命令行选项。

getopt命令

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

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

区别: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

代码部分转载自http://blog.youkuaiyun.com/sofia1217/article/details/52244582

          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值