Я пишу bash-скрипт для класса, у которого есть главное меню с двумя подменю. Я еще не закончил свой сценарий, но у меня уже есть проблема, которую я не смог исправить:
Мой сценарий работает нормально, но каждый раз, когда я запускаю его, я получаю следующую ошибку (но мой код все еще выполняется как задумано):
./menu1.sh: line 105: =: command not found
Кроме того, когда я вхожу в два других подменю, я получаю ту же ошибку (из-за схожего кода): ./menu1.sh: line 7: e: command not found
./menu1.sh: line 79: r: command not found
Строка, которая вызывает ошибку: until ($choice = q);
который я использую, чтобы остаться в каждом отдельном меню, пока пользователь не введет q
.
Добавление set -x
в мой код показывает + = q
прямо перед тем, как вывести ошибку.
Ввод, which until
в терминал, ничего не даст (он не выводит пути).
Наконец, набрав echo $SHELL
печатает /bin/bash
поэтому я использую bash.
Вот весь мой исходный код (незаконченный):
#!/bin/bash
q=
cNum=
cNum1=
editSub () {
until ($choice = q); #ERROR OCCURS HERE
do
echo ""
echo "Edit Submenu:"
echo ""
echo "(a) Add a course"
echo "(d) Delete a course"
echo "(p) Display a course"
echo "(u) Update a course (status and/or grade)"
echo "(q) Return to Main Menu"
echo ""
echo -n "Enter choice: "
read choice
case $choice in
a)
echo -n "Course Number:"
read cNum
if (grep $cNum my_course)
then
echo "$cNum already exists!"
else
awk '/'$cNum'/ {printf $1$2 OFS $4 OFS $5 OFS $6 OFS $7 OFS $8" 0 N/A"}' courses.txt | cat >> my_course #THIS NEEDS WORK. clear the extra stuff and add integer credit value
fi
;;
d)
echo -n "Course Number: "
read cNum
if (grep $cNum my_course)
then
sed --in-place '/'$cNum'/d' my_course
echo "$cNum successfully deleted."
else
echo "Course does not exist."
fi
;;
p)
echo -n "Course Number: "
read cNum
if (grep $cNum my_course)
then
awk'/'$cNum'/ {printf "Course Number: "$1"'
#print the rest of the course info in a pretty format
else
echo "Course does not exist."
fi
;;
u)
echo -n "Course Number: "
read cNum
echo -n "Status: "
read status
echo -n "Grade: "
read grade
if (grep $cNum my_course)
then
date
#validate input for status and grade
#if status 0 or 1, change my_course to say so
#grade ABC, 1. N/A, 0.
#error message if invalid input
else
echo "Course does not exist."
fi
;; #FINISH THIS
q) return ;;
*) echo "Invalid choice.";;
esac
done
}
reportSub () {
until ($choice = q); #ERROR OCCURS HERE
do
echo ""
echo "Report Submenu:"
echo ""
echo "(a) Sort by course number"
echo "(p) Display all courses that you have taken"
echo "(g) Calculate the GPA"
echo "(q) Return to Main Menu"
echo ""
echo -n "Enter choice: "
read choice
case $choice in
a) sort -n my_course
;;
p) grep ' 1 ' my_course | sort
;;
g) date ;; #calculate GPA
q) return ;;
*) echo "Invalid choice.";;
esac
done
}
#main function
until ($choice = q); #ERROR OCCURS HERE
do
if [ -f my_course ]
then
echo ""
echo "Main Menu:"
echo ""
echo "(e) Edit Submenu"
echo "(r) Report Submenu"
echo "(q) Quit"
echo ""
echo -n "Enter choice: "
read choice
case $choice in
e) editSub ;;
r) reportSub ;;
q) exit ;;
*) echo "Invalid choice.";;
esac
else
>> my_course
fi
done
exit