Linux下杂乱无章的Bash脚本传入参数--如何解析?

7 篇文章 0 订阅

无论是外置的getopt命令,亦或是bash内置的getopts函数,都对bash脚本的传入参数做了一些规定,比如强制规定了短参数"-t 1",长参数“--test 1”。但是现实环境的脚本参数是杂乱无章的,不光是长短参数结合的, 还有类似这样的参数"-test 1", 注意了是长参数的基础上少一个减号“-”。如此混乱的传入参数,如何解析,是一个令人头大的难题。

针对不规范的参数"-test 1", 使用getopt命令的“-a”参数。
注释:“-a, --alternative            Allow long options starting with single -”

wll@linux:~/wll/temp$ getopt -h

Usage:
 getopt optstring parameters
 getopt [options] [--] optstring parameters
 getopt [options] -o|--options optstring [options] [--] parameters

Options:
 -a, --alternative            Allow long options starting with single -
 -h, --help                   This small usage guide
 -l, --longoptions <longopts> Long options to be recognized
 -n, --name <progname>        The name under which errors are reported
 -o, --options <optstring>    Short options to be recognized
 -q, --quiet                  Disable error reporting by getopt(3)
 -Q, --quiet-output           No normal output
 -s, --shell <shell>          Set shell quoting conventions
 -T, --test                   Test for getopt(1) version
 -u, --unquoted               Do not quote the output
 -V, --version                Output version information

 以下以解析2个参数“-upgrade” 和“-upath”为例。

#!/bin/bash


upgrade_lable=0
update_path=/tmp/up_path

# parse cmd line args: -upgrade and -upath
ARGS=`getopt -a -q -o "" -l "upgrade:,upath:" -- $@`
if [ $? != 0 ]; then
    echo "getopt parsed all input args, but failed to parsed a part of..."
fi

echo ARGS=[$ARGS]
# set formated args to ($1, $2, ...)
eval set -- "${ARGS}"
echo formatted parameters=[$@]

while true
do
    case "$1" in
        --upgrade)
            echo "Option upgrade argument $2";
            upgrade_lable=$2
            shift 2
            ;;
        --upath)
            echo "Option upath argument $2";
            update_path="$2"
            shift 2
            ;;
        --)
            shift
            break
            ;;
        *)
            echo "Internal error!, argument $1";
            shift
            ;;
    esac
done

echo "update_path=${update_path}"
echo "upgrade_lable=${upgrade_lable}"

希望对大家的脚本参数解析有所帮助。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值