Shell-具名参数传参

一般参数过多的时候,为了方便理解,可以将参数具名化,而且还可以摆脱顺序限制。

#!/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时为真

你可能感兴趣的:(运维)