На этот вопрос уже есть ответ:
Я хочу сравнить строки в Bash с помощью операторов if
, но это не работает:
#!/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
В Bash test
(синоним для [ ... ]
) встроенный, и также для обычно предпочтительного [[ ... ]]
выражения, необходимо разделить все аргументы и операторы с пробелами.
Кроме того, необходимо всегда заключать переменные в кавычки. Также рекомендуется использовать добавление отступа, чтобы сделать Ваш код лучше читаемым и использовать модернизированный синтаксис замены процесса $(...)
вместо `...`
.
О, и lsb_release
имеет a -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