读入数字,然后在循环中添加它们。Bash/Linux

读入数字,然后在循环中添加它们。Bash/Linux,linux,bash,loops,Linux,Bash,Loops,救命啊 我在寻找如何添加我在read循环中编写的数字时遇到了很大的问题。 我要做的任务是添加X个数量的数字,我必须使用read,然后在按下Ctrl+d时添加所有数字。我对linux相当陌生,因此请尽可能简单: #!/bin/bash sum=0 while read num; do let sum=sum+num; done echo $sum 命令: ./script.sh 输入: 1 2 3 4 5 ctrl+D 输出: 15 假设您的输入每行包含一个数字,而没有其他内容

救命啊

我在寻找如何添加我在read循环中编写的数字时遇到了很大的问题。 我要做的任务是添加X个数量的数字,我必须使用read,然后在按下Ctrl+d时添加所有数字。我对linux相当陌生,因此请尽可能简单:

#!/bin/bash

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

echo $sum
命令:

./script.sh
输入:

1
2
3
4
5
ctrl+D
输出:

15

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

cat $file | tr "\n" "+" | tr -d " " | sed 's/\+$/\n/' | bc
cat的无用用法:这是一个示例,因此cat$文件表示每行可能输出一个数字的任何内容


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

我最喜欢的技巧是使用bc:

如果不想使用bc,可以使用bash评估:


请提供输入和输出的示例。问题应该包括您解决问题的尝试。为什么这么复杂:@sehe:曾经写过它,放在那里,然后只是复制了它。不过,您的解决方案更好,我记得我也曾使用过,但忘记了:。谢谢。-1因为没有像问题所说的那样使用循环。+1虽然它没有使用循环来完成工作,但它仍然是一个有趣的解决方案,我利用它来解决另一个问题。感谢您的回答:-1感谢您没有像问题所说的那样使用循环。您不处理尾随换行符1\n2\n3\n将变成1+2+3+,如果输入是使用cat>文件创建的,并使用^D终止,则会出现这种情况。@Bluewind fixed:它现在处理此问题:@sehe您给出的答案不会有点高代表性,而不回答问题吗问题?@dogbane不,我不是。我认为由于缺乏经验,这个问题的措辞过于严格。现在,我基本上看到OP怀疑他可能在循环中这样做,因为这是他用来生成数字的。
xargs -n1 | paste -sd+ | bc
sum=$(($(xargs -n1 | paste -sd+)))

echo $sum
#!/bin/bash

shopt -s extglob

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

echo "$SUM"