-
例子:
while getopts ":e:s:pd:l" arg;
do
case $arg in
e)
ghs_env=$OPTARG
;;
s)
ghs_service=$OPTARG
;;
p)
proxy=`sed '/^PROXY=/!d;s/.*=//' config.properties`
;;
d)
dir_path=$OPTARG
;;
l)
if [ -d "log" ]; then
rm -r log
mkdir log
else
mkdir log
fi
log_dir=$(cd `dirname $0`; pwd)/log
;;
?)
echo "Usage: $(basename $0) [-e somevalue] [-s somevalue] [-p somevalue] [-d somevalue]" 1>&2
exit 1
;;
esac
done getopts有两个参数,第一个参数是一个字符串,包括字符和" : ", 每一个字符都是一个有效的选项,如果字符后面带有" : ", 表示这个字符有自己的参数。getopts从命令中获取这些参数,并且删去了" - ", 并将其赋值在第二个参数中,即"OPTARG"中,在例子中,$OPTARG存储相应选项的参数。
while getopts ":e:s:pd:l" arg; 这行代码中,第一个冒号表示忽略系统报错信息,使用自定义的报错信息;字符后面的冒号表示该选项必须自己的参数。
-
第一个冒号存在时(自定义报错信息):
当指定的参数不存在时,variable设置为" : ", 对应的$OPTARG为此时的选项 (这个尚未搞明白是什么意思)
当指定的选项是带参数的而没有提供参数或是非法选项(指定的选项没有定义),variable设置为" ? ", 对应的$OPTARG为此时的选项
-
第一个冒号不存在时(会按照系统的定义报错):
指定了非法选项(不存在的选项或者说是没有定义的选项),会报错:
scriptname:illegal option — 选项
选项需要参数但没有指定,会报错:
scriptname: option requires an argument –选项
单个字符后面接一个冒号,表示选项必须自己的参数,参数可以紧跟选项后或者以空格隔开,该参数的指针赋给OPTARG。
单个字符后面接两个冒号表示该选项必须自己的参数且参数紧跟选项后不能以空格隔开(我试过,感觉有没有空格都可以,因此,我觉得如果要加参数,字符后只要写一个冒号就可以了),该参数的指针赋给OPTARG。
相关文章
- 12-30shell脚本中的特殊符号
- 12-30shell脚本中的括号和实例
- 12-30android – 如何从root设备中的shell脚本将stdout重定向到logcat?
- 12-30Shell-alias在Shell脚本中的使用
- 12-30shell 脚本中双引号 单引号 反引号 的区别
- 12-30shell脚本中的循环
- 12-30关于Shell中命令替换$(...)与后置引用`...`的不同
- 12-30【原创】AndroidStudio Gradle编译脚本中关于插件部分的变更
- 12-30数组-在Shell脚本中的基本使用介绍
- 12-30shell脚本中的$((expr)) 和 if ((expr))