2017-03-19 16 views
1

私はBashスクリプトでwhileループを使用する方法を学びたいと思っています。私はそれを実行すると予期しないトークンの近くでBash構文エラーが発生しました `done '赤色でハイライトされたviエディタ

#!/bin/bash 

continueKey = "y" 
while [continueKey -ne "n"] 
DO 

     echo "Menu Options" 
     echo "1 - whoami" 
     echo "2 - df" 
     echo "3 - date" 
     echo "4 - cal" 
     echo -n "Select option: " 

     read option 

     case "$option" in 

       1) whoami 
       ;; 

       2) df 
       ;; 

       3) date 
       ;; 

       4) cal 
       ;; 
       *) 
       echo -e "\e[31mYou made an invalid selection. Exiting.\e[39m" 
       exit 1 
       ;; 
     esac 
     echo "Enter another command?" 
     echo -n "Press 'n' to exit. Any key to continue " 
     read continueKey 
done 
exit 0 

は私が取得:行わコマンドは赤で強調表示されたviエディタで

syntax error near unexpected token `done' 

。私はここで何が間違っていますか?あなたは右のあなたのスクリプトの先頭に問題のカップルを持っている

+0

最初の部分は #/ binに/ bashのをコピーしませんでした continueKey = "Y" しばらく[continueKey -ne "N"] – rstambach

+0

最初の部分の操作を行います。 //www.shellcheck.net/ – rstambach

+1

のhttpをコピーしませんでしたスクリプトの – melpomene

答えて

1

おかげで、:

while [continueKey -ne "n"] 
DO 

continueKeyニーズの前で$、それ以外の場合は、単に無効なコマンドです。 DOは大文字と小文字が区別されるため、小文字にする必要があります。 -neは、整数を比較しないため、!=にする必要があります。

continueKey="y" 
while [[ $continueKey != "n" ]] 
do 

私は残りの部分を見ていませんが、あなたの質問に関しては問題です。 !スクリプトの

+0

はい、ありがとうございました。 – rstambach

+0

また、テストコマンドまたは条件式の要素間にスペースが必要です。つまり、 '[$ continueKey!=" n "]'は動作します、 '[$ continueKey!=" n "]'は動作しません。ダブルブラケットの場合も同様です。 (答えはこの権利を持っている、私はそれが明示的に指摘する価値があると思った。) –