我的要求非常简单,我只想检查getopts
参数是否为空。我正在使用詹金斯踢我的脚本,需要检查是否提供的值为空,然后设置默认值,否则使用提供的值:
并将参数传递给shell脚本,如下所示:
./rds-db-dump.sh -s ${source_instance_id} -c ${target_instance_class} -i ${source_snapshot_id}
shell脚本片段:
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
来实现此目的,以检查参数是否为空,而不是分配一些默认值以执行某些操作,否则请使用提供的参数值。
答案 0 :(得分:0)
它实际上不在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.