2013-07-06 46 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