计算命令行参数的总和并显示结果

时间:2013-05-26 08:33:46

标签: bash

编写一个bash脚本,添加其命令行参数并显示结果。假设命令行参数是除参数本身之外的所有整数。

例如:

% addprogram 2 5 7
The total is 14

我尽我所能,似乎无法在网上找到任何东西,请保持答案非常简单。

我尝过这样的话:

#!/bin/bash

total += $@

但我不认为bash中存在运算符。

我的算法是这样的:

  1. 对于从命令行传递的参数,
  2. 将第一个参数添加到总计
  3. 转到下一个参数并将其添加到总计
  4. 只要有参数
  5. 就重复
  6. 输出总数

6 个答案:

答案 0 :(得分:7)

因为没有人完成它

IFS=+
bc<<<"$*"

使用bc可以获得bignums;当数字很大时,shell内置算法会失败。

expr可能会也可能不会取决于它是否是最近的GNU coreutils版本。

IFS<<<只是让它更短的技巧。

是一个更容易理解的版本
echo $* | sed 's/ /+/g' | bc

答案 1 :(得分:5)

posix兼容版本:

for i do
    sum=$(expr $sum + $i)
done
echo $sum

请注意,默认情况下for会重复$@

答案 2 :(得分:2)

这样的东西?

for n in $@
do
  let sum=$sum+$n
done
echo The total is $sum

答案 3 :(得分:1)

我喜欢awk,所以我会这样做:

echo $@ | tr ' ' '\n' | awk '{sum+=$0}END{print sum}'

纯粹的bash版本可能会像:

echo $@ | tr ' ' '\n' | ( sum=0; while read; do sum=$((sum+REPLY)); done; echo $sum )

答案 4 :(得分:0)

按照您提供的步骤,shiftexpr

sum=0
while [ -n "$1" ]; do
    sum=`expr $sum + $1`
    shift
done
echo $sum

答案 5 :(得分:0)

我会这样做:

total=0

for i in $@; do
  (( total+=i ))
done

echo "The total is $total"