Shell
·
发表于 5年以前
·
阅读量:318
使用getopts处理参数虽然是方便,但仍然有小小的局限性:
getops命令可以识别带空格值的选项和参数,并分离选项和参数
# !/bin/bash
# 使用getopts识别输入选项
while getopts ab:c opt # 识别选项,赋给变量opt,开始while遍历;字符串ab:c是选项列表,每个字母代表一个选项,带值选项后面有:;不带:的是开关型选项(true/false),不需要指定选项值,cmd命令含有开关型选项就表示true
do
case "$opt" in # 使用case命令,条件匹配变量$opt
"a") # 若命令行输入-a,则命中
echo 'Option a' # 选项-a的逻辑
;;
"b")
echo "Option b value : $OPTARG" # 若命令行输入-b,则命中;通过getopts的环境变量$OPTARG,输出当前-b选项的值
;;
"c") # 若命令行输入-c,则命中
echo 'Option c' # 选项-c的逻辑
;;
"*")
echo 'unknown option: $opt' # 如果输入了选项列表之外的选项,输出提示“unknown option :未知选项”
;;
esac
done
echo "$OPTIND" # getopts环境变量$OPTIND,存放当前选项在参数列表中的位置;getopts起始值是1,处理一个开关型选项,OPTIND加1,而处理一个带值选项,OPTIND则会加2
# 完成选项识别后,读取剩余参数
shift $[ $OPTIND - 1] # [$OPTIND - 1]表示当前选项的位置参数值,对选项列表进行左移操作;shift左移选项位置后,剩余参数正好到$1位置
count=1
for param in "$@" # 遍历参数列表
do
echo "param $count : $param" # 输出参数值
count=$[ $count + 1]
done
执行:
# ./getopts -ac -b "value 123" "param1 123" param2 # 分离选项和参数