2016-04-27 90 views
2
sum=0 
read n 
read -a array 

     for i in "${array[@]}" 
     do 
     sum=$(($sum + $i)) 
     done 

echo $sum 

我是新手脚本。在这里我想知道我可以使用什么来添加条件,以便读数组将被限制n次。如何从数组中读取前n个元素

例:

3 
1 2 3 4 

这里应该只添加1 2 3,它不应该采取4.

+0

相关问题:http://stackoverflow.com/questions/885620/in-bash-how-can-i-print-the-first- n元素的列表 – m00am

回答

2

我更喜欢在bashÇ循环,它不需要条件来逃避循环,看起来更整洁。

#! /bin/bash 

sum=0 

read n 
read -a array 

for ((x=0; x<n; x++)) 
do 
    sum=$((sum + array[x])) 
done 

echo "$sum" 
+0

除了n可能是一个完全不同的值的数组元素的数量... – 123

+0

在问题的上下文中,我认为你可以推断n是你想要步骤的元素的数量通过阵列。我们也应该验证n是一个数字,n <{#array [@]},{array [n]}是一个数字,但是简单的问题,简单的答案 – Martin

1

可以避免环路共有并使用参数替换为切片这样的阵列:

$ cat script.bash 
sum=0 
read -p "Enter n: " n 
read -p "Enter space separated array elements: " -a array 
echo "${array[@]:0:$n}" | sed 's/\s/+/g' | bc 
$ ./script.bash 
Enter n: 3 
Enter space separated array elements: 1 2 3 4 
6 
$ 

echo "${array[@]:0:$n}" | sed 's/\s/+/g' | bc这个说法动态地+切片阵列和替代空间\s形成广告dition表达,其然后用管道输送到bc(计算器)

0

总和= 0 读取n J = 0 读-a阵列

for i in "${array[@]}" 
    do 
    if [[ $j -ge $n ]];then 
    break 
    else 
    sum=$(($sum + $i)) 
    ((j = j + 1)) 
    fi 
    done 

回波$总和

1
sum=0 
i=0 
read n 
read -a array 

    while [[ $i -lt $n ]]           
    do 
     sum=$(($sum + ${array[$i]})) 
     let i++ 
    done 

echo $sum 

我想这和它的工作。在顺便说一句感谢大家

0
#!/bin/bash 
param=$1 
sum=0 

for i in {0..$param} 
do 
let " sum = $sum + ${array[$i]} " 
done 

echo "RESULT: $sum" 

和执行

./scipt.sh n