【问题标题】:getopts empty argument and default valuegetopts 空参数和默认值
【发布时间】:2019-05-15 06:27:59
【问题描述】:

我的要求很简单,我只想检查getopts 参数是否为空。我正在使用 jenkins 踢我的脚本,需要检查提供的值是否为空,然后设置默认值,否则使用提供的值:

并将参数传递给 shell 脚本,如下所示:

./rds-db-dump.sh -s ${source_instance_id}  -c ${target_instance_class} -i ${source_snapshot_id}

来自 shell 脚本的 sn-p:

while getopts ":s:c:i:h" opt; do
  case ${opt} in
    s) SOURCE_INSTANCE_ID="${OPTARG}"
    ;;
    c) TARGET_INSTANCE_CLASS="${OPTARG}"
    ;;
    i) SOURCE_SNAPSHOT_ID="${OPTARG}"
    ;;
    h) usage && exit 1
    ;;
    \?) echo "Invalid option -${OPTARG}" >&2
    usage && exit 1
    ;;
  esac
done

echo "SOURCE_SNAPSHOT_ID: ${SOURCE_SNAPSHOT_ID}"
echo "TARGET_INSTANCE_CLASS: ${TARGET_INSTANCE_CLASS}"

当我开始这份工作时,它并没有给我想要的结果:

我如何使用getopts 来检查参数是否为空,而不是分配一些默认值来执行某些操作,否则使用提供的参数值。

【问题讨论】:

    标签: linux bash shell getopts


    【解决方案1】:

    它实际上不在 getopts 中,但如果变量为空或不为空,您可以让 shell 以不同方式扩展变量,例如

        i) SOURCE_SNAPSHOT_ID="${OPTARG:-yourdefaultvalue}"
    

    或者,您可以检查 OPTARG 是否为空并继续,或者在整个循环之后设置默认值,例如当且仅当它之前为空时,它们中的任何一个都会设置 SOURCE_SNAPSHOT_ID

    : ${SOURCE_SNAPSHOT_ID:=yourdefaultvalue}
    SOURCE_SNAPSHOT_ID=${SOURCE_SNAPSHOT_ID:-yourdefaultvalue}
    

    有关此类变量用法的更多信息,请参阅 bash 手册的“参数扩展”(仅引用我使用的两个):

       ${parameter:-word}
              Use  Default  Values.   If  parameter is unset or null, the expansion of word is substituted.
              Otherwise, the value of parameter is substituted.
       ${parameter:=word}
              Assign Default Values.  If parameter is unset or null, the expansion of word is  assigned  to
              parameter.   The  value  of parameter is then substituted.  Positional parameters and special
              parameters may not be assigned to in this way.
    

    【讨论】:

      【解决方案2】:

      只是测试一下:

      • 分配一个变量
      Z) testarg=$OPTARG
          ;;
      
      • 测试变量
      if [ -z "$testarg" ]; then $(set default value); fi
      

      【讨论】:

        猜你喜欢
        • 2014-03-09
        • 2014-03-30
        • 2017-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-08
        • 1970-01-01
        相关资源
        最近更新 更多