我有类似的东西:
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
多次使用该选项。