【shell笔记>参数解析】使用getopts解析长格式输入参数

这两天因为工作需求,需要写一些脚本,其中就涉及输入参数的解析,因为单个字符的选项-a-o等等很难清楚地说明输入的参数,也不方面调试,所以在想怎么能够解析--形式的选项,比如--input_file--output_file

关于单字符选项及参数的解析可以查阅笔记处理用户输入

这里放下如何用getopts解析长格式的输入参数方法:

#!/usr/bin/env bash 
optspec=":hv-:"
while getopts "$optspec" optchar; do
    case "${optchar}" in
        -)
            case "${OPTARG}" in
                loglevel)
                    val="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ))
                    echo "Parsing option: '--${OPTARG}', value: '${val}'" >&2;
                    ;;
                loglevel=*)
                    val=${OPTARG#*=}
                    opt=${OPTARG%=$val}
                    echo "Parsing option: '--${opt}', value: '${val}'" >&2
                    ;;
                *)
                    if [ "$OPTERR" = 1 ] && [ "${optspec:0:1}" != ":" ]; then
                        echo "Unknown option --${OPTARG}" >&2
                    fi
                    ;;
            esac;;
        h)
            echo "usage: $0 [-v] [--loglevel[=]<value>]" >&2
            exit 2
            ;;
        v)
            echo "Parsing option: '-${optchar}'" >&2
            ;;
        *)
            if [ "$OPTERR" != 1 ] || [ "${optspec:0:1}" = ":" ]; then
                echo "Non-option argument: '-${OPTARG}'" >&2
            fi
            ;;
    esac
done

注意getoptgetopts的差异。

来源:https://stackoverflow.com/questions/402377/using-getopts-in-bash-shell-script-to-get-long-and-short-command-line-options

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 1,700评论 0 2
  • 1.创建文件夹 !/bin/sh mkdir -m 777 "%%1" 2.创建文件 !/bin/sh touch...
    BigJeffWang阅读 3,659评论 4 50
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    O感悟人生O阅读 7,990评论 2 27
  • getopt:和C中的getopt()等价。optparse:2.7后已不推荐使用。argparse:基于optp...
    顾慎为阅读 6,566评论 1 11
  • 风华正茂 家庭幸福 今天,他高兴 她,也高兴 结果 他 她
    南山有轻风阅读 30评论 0 0