如何在bash脚本中添加数字
我有这个bash脚本,我在第16行遇到一个问题。 我怎样才能把第15行的结果添加到第16行的变量中呢? 到第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
522
10
对于整数。
使用算术扩展:
$((EXPR))
使用外部的
expr
工具。请注意,只有在非常老的系统中才需要这样做。对于浮动点。
Bash不直接支持这个,但有几个外部工具可以使用。
你也可以使用科学符号(例如:
2.5e+2
)。常见的陷阱。
当设置一个变量时,你不能在
< strike>`num= 1` < strike>`num =2`=
两边有空格,否则会迫使shell把第一个字解释为要运行的应用程序的名称(例如:num=
或num
)。
< strike>``num=`expr $num1+ $num2``bc
和expr
希望每个数字和运算符都是一个单独的参数,所以空格很重要。它们不能处理像3+``+4
这样的参数。使用
$(())
的算术扩展。更多信息见http://tldp.org/LDP/abs/html/arithexp.html。
有一千零一种方法可以做到这一点。这里有一个使用`dc'的方法。
在bash中。
请注意,bash只能处理整数运算,所以如果你的awk命令返回的是一个分数,那么你'会想要重新设计。 这里是你的代码,重写一下,在awk中做所有的数学运算。
我总是忘了语法,所以我就来google,但后来我一直没有找到我熟悉的那个:P。 这对我来说是最简洁的,也更符合我对其他语言的期待。
我也很喜欢这种方法,少了些杂乱。
你应该将metab声明为整数,然后使用算术评估。
更多信息请见https://www.gnu.org/software/bash/manual/html_node/Shell-Arithmetic.html#Shell-Arithmetic
另一种可移植的
POSIX
兼容方式,可以在.bashrc
中定义为一个函数,方便所有的算术运算符。并在命令行中调用它为。
其思路是使用输入-字段-分隔符(IFS),这是
bash
中的一个特殊变量,用于扩展后的拆字,并将行拆成字。 该函数在本地改变值,使用拆字符作为和运算符+
。请记住,
IFS
是在本地改变的,不会对函数范围外的默认IFS
行为产生影响。 摘录自man bash
页面。"$(( $* ))"
表示传递过来的参数列表要被+
分割,之后用printf
函数输出和值。 该函数还可以进行扩展,以增加其他算术运算的范围。