我有这个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

当前回答

#!/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

其他回答

#!/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)
        let num=num+metab (line 16)
    done
    echo "$num"
done

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

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

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

另一种在Bash中兼容POSIX的可移植方法,可以将其定义为.bashrc中所有算术运算符的函数。

addNumbers () {
    local IFS='+'
    printf "%s\n" "$(( $* ))"
}

在命令行中调用它,

addNumbers 1 2 3 4 5 100
115

这个想法是使用输入字段分隔符(IFS),这是Bash中的一个特殊变量,用于展开后的单词分割和将行分割为单词。该函数在局部更改值,以使用分词字符作为和运算符+。

请记住,IFS是在本地更改的,不会对函数作用域之外的默认IFS行为生效。这是男人狂欢页面的节选,

shell将IFS的每个字符视为分隔符,并将其他展开的结果划分为这些字符上的单词。如果未设置IFS,或者它的值为默认值,则忽略前面展开结果的开头和结尾的、、和序列,并且不在开头或结尾的任何IFS字符序列都用于分隔单词。

“$(($*))”表示传递的参数列表,将被+分割,然后使用printf函数输出求和值。该函数还可以扩展为其他算术运算添加作用域。

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

我总是忘记语法,所以我来到谷歌搜索,但我从来没有找到一个我熟悉的:P。这对我来说是最干净的,更符合我对其他语言的期望。

i=0
((i++))

echo $i;