在If循环中检查bash上的变量是否为空

时间:2017-08-18 10:03:36

标签: string bash if-statement

我想在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之外,还有更好更有效的方法来执行这些检查并根据结果采取相关措施吗?

3 个答案:

答案 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的脚本中,我还必须检查是否设置为空。