2016-11-23 12 views
0

初めてここで質問しても、まだbashを学んでいるので、私に同行してください。whileとcaseを使用した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

'read $ 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 ]する必要があります。すべてのシェル変数を二重引用符で囲むことを忘れないでください。 readコマンドがread OP
  2. case構築物は、最終的な代入文がWH=5なく$WH=5

、このような些細な問題をデバッグするhttps://www.shellcheck.netを使用する必要があります終了;;

  • と少なくとも1つの行に必要なする必要があります
  • +1

    申し訳ありませんが、すべてを修正するために管理され、非常にありがとう! – washedaway

    +0

    いくつかの一般的な規則:変数の値を取得するには '$'を使います。変数参照( '$ WH'の代わりに' '$ WH" ')を二重引用符で囲みます。スペースはシェル内で膨大な量になります(例えば、 '!='の前後)。ああ、もう1つ:小文字の変数名を使用するのが最善です。シェルや他のプログラム(すべて大文字です)に特別な意味を持つ変数との競合を避けてください。 –

    関連する問題