2016-11-23 8 views
0

первый раз задавая вопрос здесь и все еще изучая bash, так что несите меня.Ошибка скрипта Bash с использованием while и case

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


while [ $WH!=5 ] 
do 

echo "Choice menu:" 
echo "   1) Option 1" 
echo "   2) Option 2" 
echo "   3) Option 3" 
echo "   4) Option 4" 
echo "   5) End script" 
echo -n "Choose an option: " 
read $OP 

case $OP in 
     1) 
      # code;; 

     2) 
      # more code;; 

     3) 
      # more code;; 

     4) 
      # even more code;; 

     5) 
      echo "Thank you for testing this script!" 
      $WH=5;; 
esac 
done 

Независимо от того, что я положил в $OP, сценарий не устает повторять меню выбора, пока я не отменить его. Я попытался переехать в то время как и использовал $OP в качестве условия, но ничего не работало.

+0

Он должен быть «прочитан OP», а не 'read $ OP'. –

+1

Условие 'while' также неверно (требуется пробел вокруг'! = ') - https://www.shellcheck.net/ расскажет вам об этом. –

+0

Это может помочь: [Как отладить скрипт bash?] (Http://unix.stackexchange.com/q/155551/74329) – Cyrus

ответ

2

У вас есть несколько вопросов в сценарии: -

  1. while конструкция должна быть while [ "$WH" != 5 ]. Не забудьте дважды указать все переменные оболочки.
  2. Команда read должна быть read OP
  3. В case конструкции необходимо по крайней мере одну строку с окончания ;;
  4. Заявление окончательное назначение должно быть WH=5 и не $WH=5

Используйте https://www.shellcheck.net отлаживать такие тривиальные вопросы ,

+1

Хорошо, удалось исправить все, спасибо вам большое! – washedaway

+0

Некоторые общие правила: используйте '$' для получения значений переменных, * not * при установке их значений; используйте двойные кавычки вокруг ссылок переменных ('' $ WH "вместо' $ WH'); и пространства имеют огромное значение в оболочке (например, вокруг '! ='). О, и еще один: лучше использовать имена переменных нижнего регистра, избегайте конфликтов с переменными, которые имеют особое значение для оболочки и/или других программ (все это шапки). –