Мой nestedif по сценариям оболочки Unix с использованием sh имеет синтаксическую ошибку, и я не могу ее исправить - PullRequest
0 голосов
/ 09 мая 2019

Я кодирую программу nestedif, как показано ниже, но есть синтаксическая ошибка, которая говорит «Синтаксическая ошибка: затем» неожиданная (ожидается «fi»)

#!bin/sh

choose=0
echo "Do you want to choose a color?"

read choose

if [ $choose == "Y" ] ; then

echo "1. Blue"

echo "2. Green"

echo -n "Select your choice [1 or 2]? "

read choice

 if [ $choice == "1" ] ; then

        echo "you chose blue"
 else [ $choice == "2" ] ; then

        echo "you chose green"
 fi

else     

 echo " invalid choice"

fi

Я ожидаю, что если я выберу 1, то вывод будет синим, тогда, если я выберу 2, вывод будет зеленым, иначе неверный выбор

1 Ответ

2 голосов
/ 09 мая 2019

Заменить:

else [ $choice == "2" ] ; then

на:

elif [ "$choice" = "2" ] ; then

Примечания:

  1. else используется для заключительного предложения, одинбез условий, в операторе if.Используйте elif, если вы хотите применить тест, такой как, в данном случае, [ "$choice" = "2" ].

  2. Всегда помещайте переменные оболочки в двойные кавычки, если вы явно не хотите, чтобы оболочкаприменять расширения, такие как разделение слов и расширение имени пути.

  3. == внутри [...] не является POSIX.Баш принимает это, но другие оболочки, такие как dash, не принимают.Для большей мобильности используйте =.

...