Подтвердить что ты не робот

Использование if elif fi в сценариях оболочки

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

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: [: missing `] 'команда не найдена

4b9b3361

Ответ 1

sh интерпретирует && как оператор оболочки. Измените его на -a, thats [ s operator:

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

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

Ответ 2

Ответ Джоша Ли отвечает, но вы можете использовать "& &". оператора для лучшей читаемости следующим образом:

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

Ответ 3

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

if [[ expression ]]

Ответ 4

Измените "[" на "[[" и "]" на "]]".

Ответ 5

У меня есть образец из вашего кода. Попробуйте следующее:

echo "*Select Option:*"
echo "1 - script1"
echo "2 - script2"
echo "3 - script3 "
read option
echo "You have selected" $option"."
if [ $option="1" ]
then
    echo "1"
elif [ $option="2" ]
then
    echo "2"
    exit 0
elif [ $option="3" ]
then
    echo "3"
    exit 0
else
    echo "Please try again from given options only."
fi

Это должно сработать.:)

Ответ 6

Это работает для меня,

 # cat checking.sh
 #!/bin/bash
 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

 # ./checking.sh
 You have provided the following arguments
 All of the specified args are equal

Вы можете добавить "set -x" в script для устранения ошибок,

Спасибо.