Использование 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 `] 'команда не найдена
Ответы
Ответ 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 для устранения ошибок,
Спасибо.