我想使用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