2013-07-06 61 views
0

這是腳本,我不斷收到意想不到的fi錯誤。我錯過了什麼? ..(我開始使用[]的if語句,但自從我使用這個命令我刪除了[] ..它是確定這種方式?)在bash腳本中意外的fi

if type "java" 2>&1; 
    then 
     echo "All ok . . . "; 
     exit                                    
    else 
     read -n1 -r -p "Yo need to install" 
     while true; do 
      echo "Want to install??" 
      select yn in "y" "n"; do 
       case $yn in 
        y) echo "Installing here..."; break;; 
        n) echo "Ok... stopping..."; exit;; 
       esac 
      done 
     exit 
fi 

的感謝!

+0

您可能會發現一個像[ShellCheck](http://www.shellcheck.net)這樣的工具,有助於找出將來的基本語法錯誤。在這裏,它指向'do'說'找不到'做'這個'做'。「,然後到'fi'說'預期'完成'匹配前面提到'做'。」 –

回答

3

whiledone,不exit結束。試試這個:

if type "java" 2>&1; 
    then 
     echo "All ok . . . "; 
     exit                                    
    else 
     read -n1 -r -p "Yo need to install" 
     while true; do 
      echo "Want to install??" 
      select yn in "y" "n"; do 
       case $yn in 
        y) echo "Installing here..."; break;; 
        n) echo "Ok... stopping..."; exit;; 
       esaC# <-- ending `case` 
      done  # <-- ending `select` 
     done   # <-- while ends with `done`, not `exit`! 
fi     # <-- ending `if` 
+0

太棒了!這就是問題......你能告訴我爲什麼要再次使用'done',請嗎? ......第一個結束'while'..第二個'else' ?? – AAlvz

+0

@A阿爾維斯:每個'do'都以'done'結尾。你有一個'while'和一個'select'。 –

+0

@A阿爾維斯 - 我編輯了我的答案,以顯示哪些結局符合什麼。第一個'done'匹配'select ... do',而第二個匹配'while ... do'。 – DaoWen

1

你有最後fi之前exit;我想這應該是一個done