2016-10-22 8 views
1

Ich versuche, ein kurzes Skript zu schreiben, das eine variable Anzahl von Parametern akzeptiert (auch Zahlen) fügt dann diese Parameter zusammen, um eine Gesamtzahl der Zahlen zu erhalten. Dann erhält man einen Durchschnitt für diese eingegebenen Zahlen. Das ist was ich bisher habe;Bash Shell, Hinzufügen einer variablen Anzahl von Variablen

#!/bin/bash 

count=1 
ncount=1 
echo 
echo "please enter number of parameters: " 
read parano 

while [ $parano -ge $numbers$count ] 
    do 
    echo 
    echo "Please enter parameter $count: " 
    read number$ncount 
    let count=count+1 
    let ncount=ncount+1 

done 

Total=$((number$ncounttotal)) 
Average=$((Total/parano)) 

echo 
echo "You have chosen $parano parameters" 
echo 
echo "The average is $Average" 
echo 

Es ist nur die Linie, die die Gesamt für die Berechnung, dass ich Probleme habe mit und kann nicht scheinen, um den Code zu finden, sie zu berechnen. Der Rest scheint gut zu funktionieren, aber der Durchschnitt kommt immer als 0 heraus, weil die Summe nicht berechnet wird. Wer hat irgendwelche Ideen?

+0

Sie versuchen dynamisch Variablennamen mit '$ numbers $ count' und' number $ counttotal' zu generieren, aber das funktioniert nicht. Sie sollten wahrscheinlich stattdessen ein Array verwenden, siehe [hier] (http://mywiki.wooledge.org/BashFAQ/006) für eine ausführliche Diskussion. –

+0

Ich schätze das Feedback und den Link, ich habe es durchgesehen, aber ich bin ziemlich neu im Programmieren, also geht mir fast buchstäblich über den Kopf. Könntest du mir vielleicht ein Beispiel geben? @ BenjaminW. –

+0

Es stellte sich heraus, dass ich mich geirrt habe, es ist möglich, Variablen wie diese mit 'read' zuzuweisen, aber im Allgemeinen kann man einen Variablennamen in Bash nicht dynamisch generieren und man braucht Indirection - aber wie Sie herausgefunden haben, sind Arrays der Weg dazu Gehe hier hin. –

Antwort

1
#!/bin/bash 

[ $# -eq 0 ] && exit 1 

for number in [email protected]; do 
    sum=$(($sum + $number)) 
done 

average=$(echo "$sum/$#" | bc -l) 

echo $average 

Dann rufen Sie es mögen:

./shellscript 1 2 3 

Ich benutze bc oben da bash nur Integer-Arithmetik tun und das ist nicht gut für den Durchschnitt.

0

Vielen Dank für die Hilfe Jungs. Die Antwort auf das, was ich brauchte, war ein Array wie erwähnt.

Die Antwort war, ein Array als die Summe zu machen und fügen Sie die Variablen zum Array hinzu, als sie entlang gingen. Zumindest denke ich, dass es das ist. Wie auch immer es funktioniert, danke allen!

Verwandte Themen