0

帮助!

我在找出如何添加我已经写入(读取)循环的数字时遇到了很大的问题。我应该做的任务是添加 X 数量的数字(我必须使用 read),然后在按下“Ctrl+d”时将它们全部添加。我对linux相当陌生,所以请尽可能简单:)

4

4 回答 4

6
#!/bin/bash

sum=0
while read num;
do
    let sum=sum+num;
done

echo $sum

命令:</p>

./script.sh

输入:

1
2
3
4
5
ctrl+D

输出:

15
于 2013-09-03T11:34:16.010 回答
2

我最喜欢的技巧在这里使用bc

xargs -n1 | paste -sd+ | bc

尽管如果您不想使用,可以使用 bash 评估bc

sum=$(($(xargs -n1 | paste -sd+)))

echo $sum
于 2013-09-03T11:37:11.907 回答
0

假设您的输入每行包含一个数字而没有其他内容,这样的事情应该可以工作:

cat $file | tr "\n" "+" | tr -d " " | sed 's/\+$/\n/' | bc

(cat 的无用用法:这是一个示例,因此 cat $file 表示任何可能每行输出一个数字的内容)

如果您的数字不是整数,您可以将 -l 选项添加到 bc ,这将启用浮点支持。

于 2013-09-03T11:36:00.580 回答
0
#!/bin/bash

shopt -s extglob

SUM=0
while read NUM && [[ $NUM == +([[:digit:]]) ]]; do
    (( SUM += NUM ))
done

echo "$SUM"
于 2013-09-03T11:48:27.310 回答