Проверка if в Bash не работает [дубликат]

Я хочу сравнить строки в 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
-3
задан 20 February 2018 в 02:28

1 ответ

В 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
6
ответ дан 30 October 2019 в 23:51

Другие вопросы по тегам:

Похожие вопросы: