Bash if-check 不起作用

Bash if-check 不起作用

我想使用if语句比较 Bash 中的字符串,但它不起作用:

#!/bin/bash
os=`lsb_release -r | sed 's/.*://'`
echo $os
if [ $os="16.04" ]
then
echo "g"
elif [ $os="14.04" ]
then
echo "b"
else
echo "c"
fi

答案1

在 Bash test(的同义词[ ... ]) 内置命令中,以及对于通常优选的[[ ... ]]表达式中,必须用空格分隔所有参数和运算符。

$(...)此外,您应始终对变量进行引用。还建议使用缩进以使代码更具可读性,并使用新式进程替换语法代替`...`

哦,还有lsb_release一个-s--short选项可以省略第一列,你不需要用它来解析它sed

它看上去可能像这样:

#!/bin/bash
os=$(lsb_release -rs)
echo "$os"
if [[ "$os" = "16.04" ]] ; then
    echo "g"
elif [[ "$os" = "14.04" ]] ; then
    echo "b"
else
    echo "c"
fi

另一方面,为了将一个变量与多个值进行比较,case可能会更漂亮

#!/bin/bash
os=$(lsb_release -rs)
echo "$os"
case "$os" in
    "16.04") echo "g" ;;
    "14.04") echo "b" ;;
    *) echo "c" ;;
esac

相关内容