2009-11-25 76 views
1

以下是一直不斷給我提出問題的代碼片段。有人可以向我解釋爲什麼我的代碼無法正常工作。Bash Shell腳本錯誤:意外令牌附近的語法錯誤'{

# Shell Version of Login Menu 

Administrator() 
{ 
    clear 
    ./Administrator.sh 
} 

# ------ Student User Menu ------ 
Student_Menu() 
{ 
    clear 
    ./studentMenu.sh 
} 

# ------ Borrow Menu ------ 
Borrow_Menu() 
{ 
    clear 
    ./BorrowBookMenu.sh 
} 

# ============================================ 
# ------ Main Menu Function Definition ------- 
# ============================================ 

menu() 
{ 
echo "" 
echo "1. Administrator" 
echo "" 
echo "2. Student user" 
echo "" 
echo "3. Guest" 
echo "" 
echo "4. Exit" 
echo "" 
echo "Enter Choice: " 
read userChoice 

if ["$userChoice" == "1"] 
then 
    Administrator 
fi 

if ["$userChoice" == "2"] 
then 
    Student_Menu 
fi 


if ["$userChoice" == "3"] 
then 
    Borrow_Menu 
fi 

if ["$userChoice" == "4"] 
then 
    echo "GOODBYE" 
    sleep 
    exit 0 
fi 

echo 
echo ...Invalid Choice... 
echo 
sleep 
clear 
menu 
} 

# Call to Main Menu Function 
menu 
+0

嘿朱利安。我建議你把這個劇本分成小塊。單獨運行每個塊,直到找出錯誤的來源。 – jkndrkn

回答

2

做這樣

# Shell Version of Login Menu 

Administrator() 
{ 
#  clear 
    ./Administrator.sh 
} 

# ------ Student User Menu ------ 
Student_Menu() 
{ 
#  clear 
    ./studentMenu.sh 
} 

# ------ Borrow Menu ------ 
Borrow_Menu() 
{ 
#  clear 
    ./BorrowBookMenu.sh 
} 

# ============================================ 
# ------ Main Menu Function Definition ------- 
# ============================================ 

menu() 
{ 
    while true 
    do 
     echo "" 
     echo "1. Administrator" 
     echo "" 
     echo "2. Student user" 
     echo "" 
     echo "3. Guest" 
     echo "" 
     echo "4. Exit" 
     echo "" 
     echo "Enter Choice: " 
     read userChoice 
     case "$userChoice" in 
      "1") Administrator ;; 
      "2") Student_Menu ;; 
      "3") Borrow_Menu ;; 
      "4") echo "bye" ;exit ;; 
      *) echo "Invalid";; 
     esac 
    done 
} 

menu 
+0

正是我在找什麼,但爲什麼我的菜單拋出這麼多的錯誤和怪異的聲明? – Julian

+0

另一件事,你爲什麼要評論「清晰」命令? – Julian

+0

,因爲我想看看會發生什麼!你不必在開發過程中使用它。 – ghostdog74

1

正如現在格式化的,代碼在Cygwin下用bash運行'OK'。

然而,在菜單功能的邏輯應該改進 - 使用「ELIF」選擇替代行動,和「其他」處理錯誤。

if [ "$userChoice" = 1 ] 
then Administrator 
elif [ "$userChoice" = 2 ] 
then Student_User 
elif [ "$userChoice" = 3 ] 
then Borrow_Menu 
elif [ "$userChoice" = 4 ] 
then echo Goodbye; sleep 1; exit 0 
else echo "Unrecognized choice $userChoice"; sleep 1; clear 
fi 

然後你就可以遍歷某個菜單...

3

你的菜單中你有

 
if ["$userChoice" == "1"] 
then 
    Administrator 
fi 

和其他類似的錯誤if聲明。您需要在[之後加一個空格,並在]之前加一個空格。在類似Bourne外殼,[不是shell的文法條件句的一部分,但預計其最後一個參數是]常規命令。

4

Bash有所謂的 「選擇」 菜單功能:

#!/bin/bash 
choices=(Administrator "Student user" Guest Exit) 
savePS3="$PS3" 
PS3="Enter choice: " 
while : 
do 
    select choice in "${choices[@]}" 
    do 
     case $REPLY in 
      1) clear 
       ./Administrator.sh 
       break;; 
      2) clear 
       ./studentMenu.sh 
       break;; 
      3) clear 
       ./BorrowBookMenu.sh 
       break;; 
      4) echo "GOODBYE" 
       break 2;; 
      *) echo 
       echo "Invalid choice" 
       echo 
       break;; 
     esac 
    done 
done 
PS3="$savePS3" 

這是菜單的樣子:

 
1) Administrator 
2) Student user 
3) Guest 
4) Exit 
Enter choice: 3 
相關問題