慕無忌1623718
2019-07-29 10:32:36
如何在bash腳本中添加數(shù)字我有這個bash腳本,我在第16行遇到了問題。如何獲取第15行的先前結果并將其添加到第16行的變量中?#!/bin/bashnum=0metab=0for ((i=1; i<=2; i++)); do
for j in `ls output-$i-*`; do
echo "$j"
metab=$(cat $j|grep EndBuffer|awk '{sum+=$2} END { print sum/120}') (line15)
num= $num + $metab (line16)
done
echo "$num"
done
3 回答

天涯盡頭無女友
TA貢獻1831條經(jīng)驗 獲得超9個贊
對于整數(shù):
使用算術擴展:
$((EXPR))
num=$((num1 + num2))num=$(($num1 + $num2)) # also worksnum=$((num1 + 2 + 3)) # ...num=$[num1+num2] # old, deprecated arithmetic expression syntax
使用外部
expr
實用程序。請注意,這僅適用于真正的舊系統(tǒng)。num=`expr $num1 + $num2` # whitespace for expr is important
對于浮點數(shù):
Bash并不直接支持這一點,但您可以使用幾種外部工具:
num=$(awk "BEGIN {print $num1+$num2; exit}")num=$(python -c "print $num1+$num2")num=$(perl -e "print $num1+$num2")num=$(echo $num1 + $num2 | bc) # whitespace for echo is important
你也可以用科學記數(shù)法(如:2.5e+2
)
常見的陷阱:
設置變量時,不能在任何一側都有空格
=
,否則會強制shell將第一個單詞解釋為要運行的應用程序的名稱(例如:num=
或num
)bc
并expr
期望每個數(shù)字和運算符作為一個單獨的參數(shù),因此空格很重要。他們無法處理像這樣的論點3+
+4
。

烙印99
TA貢獻1829條經(jīng)驗 獲得超13個贊
有一千零一種方法可以做到這一點。這是一個使用dc
:
dc <<<"$num1 $num2 + p"
但是,如果這對你來說太過苛刻(或可移植性問題)你可以說
echo $num1 $num2 + p | dc
但也許你是那些認為RPN狡猾而怪異的人之一; 別擔心!bc
在這里為您服務:
bc <<< "$num1 + $num2"echo $num1 + $num2 | bc
也就是說,您可以對腳本進行一些無關的改進
#!/bin/bashnum=0metab=0for ((i=1; i<=2; i++)); do for j in output-$i-* ; do # for can glob directly, no need to ls echo "$j" # grep can read files, no need to use cat metab=$(grep EndBuffer "$j" | awk '{sum+=$2} END { print sum/120}') num=$(( $num + $metab )) done echo "$num"done
編輯:
如BASH FAQ 022中所述,bash本身不支持浮點數(shù)。如果需要對浮點數(shù)求和,則需要使用外部工具(如bc
或dc
)。
在這種情況下,解決方案將是
num=$(dc <<<"$num $metab + p")
添加累積可能的浮點數(shù)num
。
添加回答
舉報
0/150
提交
取消