我可以透過以下方式讀取數字和操作:
echo "First number please"
read num1
echo "Second number please"
read num2
echo "Operation?"
read op
但隨後我所有添加數字的嘗試都失敗了:
case "$op" in
"+")
echo num1+num2;;
"-")
echo `num1-num2`;;
esac
跑步:
First number please
1
Second mumber please
2
Operation?
+
輸出:
num1+num2
....或者...
echo $num1+$num2;;
# results in: 1+2
....或者...
echo `$num1`+`$num2`;;
# results in: ...line 9: 1: command not found
當我嘗試添加添加(“2+2”而不是“4”)時,似乎我仍然得到字串。
答案1
POSIX shell 中的算術$
用和 雙括號完成(( ))
:
echo "$(($num1+$num2))"
您可以從中分配;另請注意,$
內部變數名稱上的運算符(())
是可選的):
num1="$((num1+num2))"
還有expr
:
expr $num1 + $num2
在腳本編寫中$(())
更可取,因為它避免了命令的分叉/執行expr
。
答案2
現有的答案是純bash,所以它會比這更快,但它只能處理整數。如果需要處理浮點數,則必須使用外部程式bc
。
$ echo 'scale=4;3.1415+9.99' | bc
13.1315
scale=4
告訴我們bc
要使用四位小數。請參閱man bc
以獲取更多資訊。
答案3
您也可以使用$[ ... ]
結構。在這種情況下,我們使用 Bash 內建的機制,它更快,使用起來更方便。由於我們知道 $[ 和 ] 之間的所有內容都被視為表達式,因此我們不需要在變數前面加上$
。同樣,我們不需要避免*
將其視為一種模式。
num1=2
num2=3
echo $[num1 + num2]
5
答案4
極簡主義者
total=0
((total+=qty))