无论是外置的getopt命令,亦或是bash内置的getopts函数,都对bash脚本的传入参数做了一些规定,比如强制规定了短参数"-t 1",长参数“--test 1”。但是现实环境的脚本参数是杂乱无章的,不光是长短参数结合的, 还有类似这样的参数"-test 1", 注意了是长参数的基础上少一个减号“-”。如此混乱的传入参数,如何解析,是一个令人头大的难题。
针对不规范的参数"-test 1", 使用getopt命令的“-a”参数。
注释:“-a, --alternative Allow long options starting with single -”
wll@linux:~/wll/temp$ getopt -hUsage:getopt optstring parametersgetopt [options] [--] optstring parametersgetopt [options] -o|--options optstring [options] [--] parametersOptions:-a, --alternative Allow long options starting with single --h, --help This small usage guide-l, --longoptions <longopts> Long options to be recognized-n, --name <progname> The name under which errors are reported-o, --options <optstring> Short options to be recognized-q, --quiet Disable error reporting by getopt(3)-Q, --quiet-output No normal output-s, --shell <shell> Set shell quoting conventions-T, --test Test for getopt(1) version-u, --unquoted Do not quote the output-V, --version Output version information
linux脚本输入参数, 以下以解析2个参数“-upgrade” 和“-upath”为例。
#!/bin/bashupgrade_lable=0
update_path=/tmp/up_path# parse cmd line args: -upgrade and -upath
ARGS=`getopt -a -q -o "" -l "upgrade:,upath:" -- $@`
if [ $? != 0 ]; thenecho "getopt parsed all input args, but failed to parsed a part of..."
fiecho ARGS=[$ARGS]
# set formated args to ($1, $2, ...)
eval set -- "${ARGS}"
echo formatted parameters=[$@]while true
docase "$1" in--upgrade)echo "Option upgrade argument $2";upgrade_lable=$2shift 2;;--upath)echo "Option upath argument $2";update_path="$2"shift 2;;--)shiftbreak;;*)echo "Internal error!, argument $1";shift;;esac
doneecho "update_path=${update_path}"
echo "upgrade_lable=${upgrade_lable}"
希望对大家的脚本参数解析有所帮助。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态