PHP
·
发表于 5年以前
·
阅读量:8326
说明:
# man getopt
# getopt abcd -b -acd # 指定parse语句abcd,告诉getopt可以解析abcd4个选项,后边跟要解析的选项-b -acd
# getopt abcd -b -acd param1 param2 # 使用getopt分离参数和选项
# getopt ab:cd -b -acd param1 param2 # 使用getopt处理带值选项;在b之后加:,表示-b选项带值
利用getopt分离带值选项和参数
# !/bin/bash
set -- `getopt -q ab:c "$@"` # 通过set --,把反引号``内执行结果返回命令行;-q选项表示quit,不输出错误;b:表示带值选项-b;$@表示原来cmd参数列表
while [ -n "$1" ] # 通过循环,遍历$1位置参数
do
case "$1" in # 使用case命令,匹配$1位置上的选项
"-a") # 变量值最好用双引号括起来,关键字用小括号括起来
echo "Option a" # 若命令行输入-a,则命中,本行可写入相关选项逻辑
;; # 每个类别结尾使用两个连续的分号来处理
# 获取-b选项的值
"-b")
value="$2" # $2是-b选项所在的位置变量
echo "Option b, value is $value" # 若命令行输入-b,则命中,本行输出-b选项的值
shift # 由于-b选项的值占有了一个位置变量,为了读取剩余选项,需要左移一位
;;
"-c")
echo "Option c" # 若命令行输入-c,则命中,本行可写入相关选项逻辑
;;
# 分离参数和选项
"--") # --作为选项的结束
shift # 左移$1位置变量,$2位置变量向前移动到$1
break # 跳出循环
;;
esac
shift # 把$2位置变量向前移动到$1,原$1位置变量不可用
done
echo "params are $*" # 输出所有参数
执行脚本,得到以下结果:
# ./getopt -ac -b 20 param1 param2
# ./getopt -ac -b "value 10" param1 param2 # getopt不能处理包含空格的选项值