我有这个Bash脚本,在第16行有一个问题。 如何获取第15行之前的结果并添加 变成第16行中的变量?

#!/bin/bash

num=0
metab=0

for ((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

当前回答

您应该将metab声明为整数,然后使用算术求值

declare -i metab num
...
num+=metab
...

更多信息请参见6.5 Shell算术。

其他回答

#!/usr/bin/bash

#integer numbers
#===============#

num1=30
num2=5

echo $(( num1 + num2 ))
echo $(( num1-num2 ))
echo $(( num1*num2 ))
echo $(( num1/num2 ))
echo $(( num1%num2 ))

read -p "Enter first number : " a
read -p "Enter second number : " b
# we can store the result
result=$(( a+b ))
echo sum of $a \& $b is $result # \ is used to espace &


#decimal numbers
#bash only support integers so we have to delegate to a tool such as bc
#==============#

num2=3.4
num1=534.3

echo $num1+$num2 | bc
echo $num1-$num2 | bc
echo $num1*$num2 |bc
echo "scale=20;$num1/$num2" | bc
echo $num1%$num2 | bc

# we can store the result
#result=$( ( echo $num1+$num2 ) | bc )
result=$( echo $num1+$num2 | bc )
echo result is $result

##Bonus##
#Calling built in methods of bc 

num=27

echo "scale=2;sqrt($num)" | bc -l # bc provides support for calculating square root

echo "scale=2;$num^3" | bc -l # calculate power

我也很喜欢这个方法。有更少的杂乱:

count=$[count+1]

使用$(())算术展开。

num=$(( $num + $metab ))

见第13章。算术展开以获得更多信息。

有一千零一种方法可以做这件事。下面是一个使用dc(一种反向波兰台式计算器,支持无限精度计算)的例子:

dc <<<"$num1 $num2 + p"

但如果这对你来说太糟糕了(或者便携性问题),你可以说

echo $num1 $num2 + p | dc

但也许你是那些认为RPN讨厌又奇怪的人之一;别担心!BC为您服务:

bc <<< "$num1 + $num2"
echo $num1 + $num2 | bc

也就是说,你可以对你的脚本进行一些无关的改进:

#!/bin/bash

num=0
metab=0

for ((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常见问题解答022中所述,Bash本身不支持浮点数。如果需要对浮点数求和,则需要使用外部工具(如bc或dc)。

在这种情况下,解决方案是

num=$(dc <<<"$num $metab + p")

将可能的浮点数累加到num中。

 #!/bin/bash
read X
read Y
echo "$(($X+$Y))"