Используя если elif fi в сценариях оболочки [дубликат]

Этот вопрос уже имеет ответ здесь:

Я не уверен, как сделать if с несколькими тестами в оболочке. Я испытываю затруднения при записи этого сценария:

echo "You have provided the following arguments $arg1 $arg2 $arg3"
if [ "$arg1" = "$arg2" && "$arg1" != "$arg3" ]
then
    echo "Two of the provided args are equal."
    exit 3
elif [ $arg1 = $arg2 && $arg1 = $arg3 ]
then
    echo "All of the specified args are equal"
    exit 0
else
    echo "All of the specified args are different"
    exit 4
fi

Проблема, я получаю эту ошибку каждый раз:

./compare.sh: [: пропавшие без вести']' команда, не найденная

54
задан Falko 27 April 2017 в 01:57
поделиться

3 ответа

sh интерпретирует && как оператор оболочки. Измените его на -a , это оператор конъюнкции [:

[ "$arg1" = "$arg2" -a "$arg1" != "$arg3" ]

Кроме того, вы всегда должны указывать переменные, потому что [ запутается, когда вы уйдете от аргументов.

33
ответ дан 7 November 2019 в 08:02
поделиться

Используйте двойные скобки ...

если [[выражение]]

9
ответ дан 7 November 2019 в 08:02
поделиться

Замените "[" на «[[» и «]» в «]]».

5
ответ дан 7 November 2019 в 08:02
поделиться