解析压缩选项到 bash

解析压缩选项到 bash

我有类似的东西:

while [[ $# > 0 ]] ; do
    key="$1"
    count=0
    echo "$1"
    case "$key" in
        -r|--rotate)
            shift
            rotate $1
            shift
            ;;
        -d|--devices)       
            shift
            while [[ "$1" != "-"* && "$1" != "" ]] ; do
                disps["$count"]="$1"
                ((count++))
                shift
            done
            calibrate disps[@]
            ;;
        -h|--help)
            shift
            usage
            ;;
        *)
            shift
            usage
            ;;
    esac
done

我想在选项中设置旋转状态,因为它们只有正常、左右和反转。

我知道我需要为它们每一个创建一个案例 -n -r -l -i 但是...我也需要为每一个组合创建一个案例?-nd|-dn, -rd|-dr...有没有更简单或更礼貌的方式?

谢谢。

答案1

使用getopt启用多头期权和空头期权以及-rdn期权串联

parsed_options=$( getopt -o r:d:h --long rotate:,device:,help --name "$(basename -- "$0")" -- "$@" )
# option name followed by a single colon indicates the option takes
# a required argument

if [ $! -ne 0 ]; then
    echo "Exiting" >&2
    exit 1
fi

eval set -- "$parsed_options"

disps=()

while :; do
    case "$1" in
        -r|--rotate)
            rotate "$2"
            shift 2
            ;;
        -d|--device)       
            disps+=("$2")   # append the arg to the disps array
            shift 2
            ;;
        -h|--help) usage; exit ;;
        --) shift; break ;;
        *) echo "Internal error" >&2; exit 1 ;;
    esac
done

if (( ${#disps[@]} == 0 )); then
    echo "no devices to calibrate"
else
    calibrate "${disps[@]}"
fi

一个选项只能接受零个或一个参数。要指定多个设备,请-d arg多次使用该选项。

相关内容