使用if语句比较空白变量

时间:2017-04-02 12:58:19

标签: bash if-statement

当我将空白变量与字符串进行比较时,我的误差

[: !=: unary operator expected

以下是我的剧本中的一行

if [ $monthlystatus = Completed ];then

command x

当我尝试按以下方式更改

if [ "$monthlystatus" = Completed ];then

command x

它没有给我预期的结果,即如果陈述给我错误的结果。 例如,当我使用双引号时,即使变量monthlystatus的值等于已完成但仍未执行命令x。

以下是真实代码。

if [ $monthlystatus != Failed ] && [ $monthlystatus != Aborted ];then

cat /home/a-hkataria/objectstatus_filesystem2.txt /home/a-hkataria/objectstatus_filesystem3.txt > /home/a-hkataria/objectstatus_filesystem4.txt

awk '$2 = $2 FS "Yes"'  /home/a-hkataria/objectstatus_filesystem4.txt

else

cat /home/a-hkataria/objectstatus_filesystem2.txt /home/a-hkataria/objectstatus_filesystem3.txt > /home/a-hkataria/objectstatus_filesystem4.txt

awk '$2 = $2 FS "No"'  /home/a-hkataria/objectstatus_filesystem4.txt

fi

因此,如果变量monthlystatus为空,则表示错误,当我使用双引号时,甚至变量值为Completed,但仍然没有在第二列显示yes

1 个答案:

答案 0 :(得分:1)

你的第二种方法是正确的。需要引用变量。演示:

while read -r line; do
    [ "$line" = Completed ] && echo "true1 for =$line=" || echo "false1 for =$line="
    [[ "$line" == Completed ]] && echo "true2 for =$line=" || echo "false2 for =$line="
    [[ "$line" =~ ^Completed$ ]] && echo "true3 for =$line=" || echo "false3 for =$line="
    echo
done <<EOF
Completed
completed
Completediano
not Completed
notCompleted

etc
EOF

输出

true1 for =Completed=
true2 for =Completed=
true3 for =Completed=

false1 for =completed=
false2 for =completed=
false3 for =completed=

false1 for =Completediano=
false2 for =Completediano=
false3 for =Completediano=

false1 for =not Completed=
false2 for =not Completed=
false3 for =not Completed=

false1 for =notCompleted=
false2 for =notCompleted=
false3 for =notCompleted=

false1 for ==
false2 for ==
false3 for ==

false1 for =etc=
false2 for =etc=
false3 for =etc=
相关问题