一般参数过多的时候,为了方便理解,可以将参数具名化,而且还可以摆脱顺序限制。
#!/bin/sh
#说明
show_usage="args:[-l, -r] [--local-repository=, --repository-url=]"
#参数
#本地仓库目录
opt_localrepo=""
#git仓库url
opt_url=""
GETOPT_ARGS=`getopt -o l:r: -al local-repository:,repository-url: -- "$@"`❶
eval set -- "$GETOPT_ARGS"❷
# echo "GETOPT_ARGS ===> $GETOPT_ARGS"
#获取参数
while [ -n "$1" ]❸
do
case "$1" in
-l|--local-repository) opt_localrepo=$2; shift 2;;❹
-r|--repository-url) opt_url=$2; shift 2;;
--) break ;;
*) echo $1,$2,$show_usage; break ;;
esac
done
#对必填项做输入检查,此处假设都为必填项
if [[ -z $opt_localrepo || -z $opt_url ]]; then❺
echo $show_usage
echo "opt_localrepo: $opt_localrepo, opt_url: $opt_url"
exit 0
fi
# 一切正常的话输出取值结果
echo "opt_localrepo: $opt_localrepo, opt_url: $opt_url"
参考:
❶ getopt命令并不是bash的内建命令,它是由util-linux包提供的外部命令。
getopt --help
Usage:
getopt <optstring> <parameters>
getopt [options] [--] <optstring> <parameters>
getopt [options] -o|--options <optstring> [options] [--] <parameters>
Parse command options.
Options:
-a, --alternative 允许长选项使用单横线'-'形式来接收参数
-l, --longoptions <longopts> 待确认的长选项名,后面必须紧跟标识
-n, --name <progname> 报告错误的名称,目前不是很懂
-o, --options <optstring> 待确认的短选项
-q, --quiet 不报告错误(如果有)
-Q, --quiet-output 不输出错误(如果有)
-s, --shell <shell> 将引用约定设置为<shell>
-T, --test 测试getopt(1)版本
-u, --unquoted 不要引用输出
-h, --help 显示帮助
-V, --version 显示版本
❷类似js中的eval,可以把字符串当命令执行
❸ Linux shell if [ -n ] 正确使用方法
❹ shift 2
,表示将原来的$3
变为$1
❺与-n相反,当串的长度为0时为真