我无法在
的计算中调试错误case $code in
${menuCode[0]} )
CBcost=$(echo "${menuItemsCost[0]} * $quantity" |bc)
sumOfCheeseBurgers=$(echo "$sumOfCheeseBurgers + $CBcost" |bc)
;;
我需要能够添加汉堡的所有总和,并在每次用户输入Y进行另一次交易时将其存储到sumOfBurgers
。但是,我一直在(standard_in) 1: syntax error
。如何正确表达sumOfBurgers=sumOfBurgers + CBcost?
declare -a menuItems=( 'Cheese Burger' 'Ham Burger' 'Spaghetti' 'Fried Chicken' 'Softdrinks' )
declare -a menuItemsCost=( 25.00 20.00 24.00 30.00 15.00 )
declare -a menuCode=( CB HB SP FC SD )
clear
printf "MENU\n"
printf "=================================\n"
printf "CODE\tDESCRIPTION\t PRICE\t|\n"
echo "================================="
printf "${menuCode[0]} |\t${menuItems[0]}\t| ${menuItemsCost[0]} |\n"
printf "${menuCode[1]} |\t${menuItems[1]}\t| ${menuItemsCost[1]} |\n"
printf "${menuCode[2]} |\t${menuItems[2]}\t| ${menuItemsCost[2]} |\n"
printf "${menuCode[3]} |\t${menuItems[3]}\t| ${menuItemsCost[3]} |\n"
printf "${menuCode[4]} |\t${menuItems[4]}\t| ${menuItemsCost[4]} |\n"
printf "=================================\n"
choice="Y"
while [ $choice == "Y" ]
do
printf "What's your order please? \n[Enter Code]: "
read code
while [ "$code" != "CB" ] && [ "$code" != "HB" ] && [ "$code" != "SP" ] &&
[ "$code" != "FC" ] && [ "$code" != "SD" ]
do
printf "Please enter a valid ORDER code. \n[Enter Code]: "
read code
code=$code
done
printf "Enter Quantity: "
read quantity
printf "Do another transaction [Y/N]?: "
read choice
case $code in
${menuCode[0]} )
CBcost=$(echo "${menuItemsCost[0]} * $quantity" |bc)
sumOfCheeseBurgers=$(echo "$sumOfCheeseBurgers + $CBcost" |bc)
;;
esac
done
printf "$sumOfCheeseBurgers\n"
答案 0 :(得分:1)
您需要在此处使用之前初始化sumOfCheeseBurgers
,否则它是一个空字符串,会导致bc
语法错误:
sumOfCheeseBurgers=$(echo "$sumOfCheeseBurgers + $CBcost" |bc)
在while
循环之前添加以下行:
sumOfCheeseBurgers=0
或者,正如评论(感谢)中所指出的,您可以使用此语法来指定默认值:
sumOfCheeseBurgers=$(echo "${sumOfCheeseBurgers-0} + $CBcost" |bc)
如果您运行类似bash -x script.sh
的脚本,则可以更清楚地看到此错误:
++ echo ' + 50.00'
++ bc
如您所见,传递给bc
的字符串在+
之前缺少值。
另外,您应该使用printf
格式说明符。例如:
printf "${menuCode[0]} |\t${menuItems[0]}\t| ${menuItemsCost[0]} |\n"
应该是这样的:
printf '%s |\t%s\t| %s |\n' "${menuCode[0]}" "${menuItems[0]}" "${menuItemsCost[0]}"
这是使用printf
的正确方法,因为它可以防止变量中的字符被解释为转义字符(例如换行符或制表符)。