为了账号安全,请及时绑定邮箱和手机立即绑定

如何在bash脚本中添加数字

如何在bash脚本中添加数字

如何在bash脚本中添加数字我有这个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条经验 获得超9个赞

对于整数

  • 使用算术扩展$((EXPR))

    num=$((num1 + num2))num=$(($num1 + $num2))       # also worksnum=$((num1 + 2 + 3))        # ...num=$[num1+num2]             # old, deprecated arithmetic expression syntax
  • 使用外部expr实用程序。请注意,这仅适用于真正的旧系统。

    num=`expr $num1 + $num2`     # whitespace for expr is important

对于浮点数

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

你也可以用科学记数法(如:2.5e+2


常见的陷阱

  • 设置变量时,不能在任何一侧都有空格=,否则会强制shell将第一个单词解释为要运行的应用程序的名称(例如:num=num

  • bcexpr期望每个数字和运算符作为一个单独的参数,因此空格很重要。他们无法处理像这样的论点3+ +4


查看完整回答
反对 回复 2019-07-29
?
烙印99

TA贡献1829条经验 获得超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本身不支持浮点数。如果需要对浮点数求和,则需要使用外部工具(如bcdc)。

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

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

添加累积可能的浮点数num


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 808 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信