2016-04-27 92 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