你的代碼看起來不錯給我,但我改變了POSIX殼體試驗了一下週圍,以測試值小於99,而不是99本身。在我刪除的腳本底部附近有一個流浪的do
。 Bash也有[[]]
樣式測試語法,您可能想在某些時候切換到這種語法。
#!/bin/bash
firstNum=0
secondNum=0
answer=0
while [ "$firstNum" -lt 99 -a "$secondNum" -lt 99 ]
do
read -p "Enter first number " firstNum
read -p "Enter second number " secondNum
printf "first num $firstNum\n"
printf "second Num $secondNum\n"
if [ "$secondNum" = 0 ]
then
printf "$secondNum was a zero, exiting!\n"
exit 1
else
printf "first num/second Num = \$(($firstNum/$secondNum))\n"
answer=$((firstNum/secondNum))
printf "Answer = $answer\n"
fi
done
如果你有興趣學習Bash的測試語法[[]]
(它比POSIX shell的測試功能更強大一點(1)[]
)這裏是使用它的一個例子:
#!/bin/bash
firstNum=0
secondNum=0
answer=0
while [[ "$firstNum" < 99 && "$secondNum" < 99 ]]
do
read -p "Enter first number " firstNum
read -p "Enter second number " secondNum
printf "first num $firstNum\n"
printf "second Num $secondNum\n"
if [[ "$secondNum" == 0 ]]
then
printf "$secondNum was a zero, exiting!\n"
exit 1
else
printf "first num/second Num = \$(($firstNum/$secondNum))\n"
answer=$((firstNum/secondNum))
printf "Answer = $answer\n"
fi
done
它可能也建議將測試移動到while
循環的主體中,而是使用慣例'while [[1]]'創建連續循環。下面是一個例子這樣做(使用bash測試語法[[]]
),並使用bc
所以腳本支持浮點運算:
#!/bin/bash
firstNum=0
secondNum=0
answer=0
while [[ 1 ]]
do
read -p "Enter first number " firstNum
read -p "Enter second number " secondNum
printf "first num $firstNum\n"
printf "second Num $secondNum\n"
case "$firstNum" in
99) printf "Invalid values\n"
exit 1
;;
esac
case "$secondNum" in
99) printf "Invalid values\n"
exit 1
;;
0) printf "Invalid values\n"
exit 1
;;
esac
answer=$(printf "$firstNum/$secondNum\n" | bc -l)
printf "Floating point supported answer using bc: = $answer \n"
done
答案然而現在顯示,我仍然得到關於第二個數字原始的錯誤消息。你有什麼想法,爲什麼這可能是? – user5399071
我沒有看到我的任何錯誤,所以也許更新上面的代碼片段,以便我們可以測試它。 – Greg
另外,你的'while'語句對我來說看起來並不熟悉,我會在互聯網上搜索'bash while'來確保你的格式是正確的。 – Greg