Atu*_*mRe 4 shell-script variable
我想输入两个数字并获得这两个数字之间所有整数的总和,包括。
例如:
./sum1 2 5
Run Code Online (Sandbox Code Playgroud)
应该屈服
sum: 14
Run Code Online (Sandbox Code Playgroud)
因为 2+3+4+5 = 14
这是我到目前为止所拥有的:
read num1 num2
for (( i=$num1; i<=$num2; i++))
do
now how to do what i want
done
echo "The Sum of your two number and the numbers inbetween is:$i"
Run Code Online (Sandbox Code Playgroud)
我想我需要在那里添加另一个变量,但我似乎找不到一个好的解决方案。
Sté*_*las 13
如果您有seq命令,则使用蛮力方法:
$ seq 2 5 | paste -sd + - | bc
14
Run Code Online (Sandbox Code Playgroud)
所以作为一个函数:
sum() { seq "$@" | paste -sd + - | bc; }
Run Code Online (Sandbox Code Playgroud)
更聪明的方法:
sum() { echo "$((($1+$2)*($2-$1+1)/2))"; }
Run Code Online (Sandbox Code Playgroud)
或者要获得bc的精度:
sum() { echo "($1+$2)*($2-$1+1)/2" | bc; }
Run Code Online (Sandbox Code Playgroud)
这个想法是计算:
2+3+4+5
Run Code Online (Sandbox Code Playgroud)
如果你加倍,你可以写:
2+3+4+5
+5+4+3+2
???????
7+7+7+7
Run Code Online (Sandbox Code Playgroud)
所以你的总和 ( 2 * s) 的两倍是 4 ( b - a + 1) 乘以7( a + b)。
2 * s = (b - a + 1) * (a + b)
Run Code Online (Sandbox Code Playgroud)
所以
s = (b - a + 1) * (a + b) / 2
Run Code Online (Sandbox Code Playgroud)