2015-10-05 48 views
0

無法運行此程序。我確信我做錯了什麼,我確定我忽略了一些事情。殼體測試條件出錯

a=3 

echo "Type in the first Grade Number." 
read num1; 
echo "Type in the Second Grade Number." 
read num2; 
echo "Type in the third Grade Number." 
read num3; 

echo \($num1 + $num2 + $num3\)/$a | bc 
read num; 

if [ $num-lt 79 ] 
then 
echo "The Grade Number is an C." 

elif [ $num-lt 89 ] 
then 
echo "The grade number is an B." 

elif [ $num-lt 99 ] 
then 
echo "Your grade number is an A." 

elif [ $num-lt 60 ] 
then 
echo "You have a failing number" 
fi 
+0

。注意,沒有人會被報告爲不及格;他們最差的時候會得到一個C等級。那些平均分數爲100分的A +學生會因爲沒有成績而惱怒。還要注意'read num'將要求用戶重新輸入'bc'給出的答案。如果你想從'bc'獲得答案,可以使用:'num = $(echo「($ num1 + $ num2 + $ num3)/ $ a」| bc)'或者等價的。 –

回答

1
if [ $num-lt 79 ] 

需要$num-lt之間的空間。沒有這一點,這是表達的兩種觀點形式。具體根據bash手冊頁,這兩個參數形式由此評價:

如果第一個參數是!,表達式爲真,當且僅當第二個參數爲空。如果第一個參數是CONDITIONAL EXPRESSIONS下面列出的一元條件運算符之一,則表達式爲真時,如果一元測試爲真。 如果第一個參數不是有效的一元條件運算符,則表達式爲false。


還有一些其他問題與你的腳本,你可能想看看爲好。

首先,您不需要;字符在您的read語句末尾。它們不會造成損害,但它們是多餘的。

其次,您似乎輸出三個等級的平均值,然後詢問另一個檢查等級的數字。我本來以爲平均本身會是一個更好的衡量標準:

num=$(echo "($num1 + $num2 + $num3)/$a" | bc) 

第三,你的邏輯意味着不及格是從來沒有輸出。並且小於60的號碼已經被初始測試捕捉到小於79。更好的方法是檢查邊界,以便與類似:

if [ $num -lt 60 ] ; then 
    echo "You failed!" 
elif [ $num -lt 80 ] ; then 
    echo "You got a C, just made it." 
elif [ $num -lt 90 ] ; then 
    echo "You got a B, not bad." 
elif [ $num -lt 100 ] ; then 
    echo "You got an A, excellent." 
else 
    echo "You got an A, perfect score." 
fi 
+0

你認爲這是一個重複的問題多少次?我們真的可以找到一個主要問題,使其成爲重複的嗎? –

+0

@Jonathan,正在搜索......在if後面或者在['後面有很多沒有空格的地方,但是在網絡上搜索標點符號是非常困難的,我放棄Perl的一個原因是:-) – paxdiablo

+0

同意困難。我發現[錯誤從'if'和'else'語句在shell](http://stackoverflow.com/questions/2410839/help-with-if-statements-and-else-newbie/2410878#2410878) - 哪些需要清理;這是'[1:命令未找到],它與2010年相近。 –