我想在if语句中检查变量的值是否为空,并根据Bash脚本中的结果执行操作。
我正在做这样的事情:
if [ -z "${OriginSlotName-}" ] && [ -z "${TargetSlotName-}" ]; then
echo "Value of both the slot are not given";
虽然我将参数OriginSlotName和TargetSlotName作为空传递,但是这个特定的迭代不会执行,而是转到bash脚本中它期望OriginSlotName和TargetSlotName的部分。
有谁知道,这里可能有什么问题?或者有更好的方法来构建脚本吗?截至目前,我有一个带有四个分支的if语句。 if语句如下所示:
If (OriginSlotName & OriginSlotName != Empty)
Do something
else if (OriginSlotName = Empty & OriginSlotName != Empty )
Do something
else if (OriginSlotName != Empty & OriginSlotName = Empty )
Do something
else
Do something (Both OriginSlotName & OriginSlotName = Empty )
除了使用if之外,还有更好更有效的方法来执行这些检查并根据结果采取相关措施吗?
答案 0 :(得分:0)
你可以写下这样的条件:
if [[ -z "${OriginSlotName}" && -z "${TargetSlotName}" ]]; then
echo "Value of both the slot are not given";
fi
如果$ OriginSlotName和$ TargetSlotName都为空
,它将仅验证此条件答案 1 :(得分:0)
你的原作如果stmt通常也能正常工作:
OriginSlotName=""
TargetSlotName=""
if [ -z "${OriginSlotName}" ] && [ -z "${TargetSlotName}" ]; then
echo "Value of both the slot are not given";
fi
echo "${TargetSlotName}"
echo "${OriginSlotName}"
当你运行它时,输出(使用GNU bash,版本4.3.11(1)-release(x86_64-pc-linux-gnu)是:
未给出插槽的值
后面跟两个空行。
我认为未决的连字符" - "代码中的变量是问题的根源。
答案 2 :(得分:0)
问题是如何调用脚本,最初我用所有必需的参数调用脚本而不用双引号将它们括起来。在用双引号括起来的参数调用脚本时,变量得到了评估。我还必须修改脚本并在这里使用ecerulm回答:How to check if a variable is set in Bash?
基本上,在定义set -u
的脚本中,我还必须检查是否设置为空。