如何用bash脚本做整数和我用for读取一些变量,我需要做总和。
我写了这样的代码:
Read N
Sum=0
for ((i=1;i<=N;i++))
do
read number
sum=sum+number
done
echo $sum
答案 0 :(得分:3)
使用算术命令((...))
:
#! /bin/bash
read n
sum=0
for ((i=1; i<=n; i++)) ; do
read number
((sum+=number))
done
echo $sum
答案 1 :(得分:0)
#!/bin/bash
echo "Enter number:"
read N
re='^[0-9]+$'
if ! [[ ${N} =~ ${re} ]]
then
echo "Error. It's not a number"
exit 1
fi
Sum=0
for ((i=1;i<=N;i++))
do
sum=$((${sum} + ${i}))
done
echo "${sum}"
答案 2 :(得分:0)
嗯,不是直接的bash解决方案,但你也可以使用seq
和datamash
(https://www.gnu.org/software/datamash/):
#!/bin/bash
read N
seq 1 $N | datamash sum 1
它非常简单(并且有其局限性),但它确实有效。您可以在seq
上使用其他选项,以获得不同于1的增量,依此类推。
答案 3 :(得分:0)
也可以将变量声明为declare -i
的整数。然后,对该变量的任何赋值都将作为算术表达式进行求值:
#!/bin/bash
declare -i sum=0
read -p "Enter n: " n
for ((i=1; i<=n; i++)) ; do
read -p "Enter number #$i: " number
sum+=number #sum=sum+number would also work
done
echo "Sum: $sum"
有关详细信息,请参阅[expr.log.or]。首选使用算术命令((...))
,请参阅Bash Reference Manual。
$ declare -i var1=1
$ var2=1
$ var1+=5
$ echo "$var1"
6
$ var2+=5
$ echo "$var2"
15
这可能会让人感到困惑,因为+=
的行为会有所不同,具体取决于变量的属性。因此,最好明确地使用((...))
进行算术运算。