2016-07-12 1 views
1

Ich bin neu in Arrays in Bash-Scripting. Ich muss ein Skript schreiben, das ein Array von der Standardeingabe in der Befehlszeile akzeptiert. und gibt die Summe davon an den Benutzer aus.Wie schreibe ich ein Shell-Skript, das Array in der Befehlszeile akzeptiert und die Summe davon ausgibt

Hier ist die Logik, aber wie kann ich es in Shell-Skript konvertieren, um in der Befehlszeile verwendet werden?

read -a array 

tot=0 
for i in ${array[@]}; do 
    let tot+=$i 
done 

echo "Total: $tot" 

Jede Hilfe wird geschätzt.

+0

Können Sie zeigen uns ein Beispiel für die Verwendung des gewünschten Skript? – Leon

+1

Was meinst du mit "ein Array akzeptieren"? Ist die Eingabe einfach ein Strom von numerischen Werten? Gibt es eine Anforderung, dass Sie diesen Stream in einem Array speichern, bevor Sie eine Summe erstellen? Die typische Lösung zum Hinzufügen eines Datenstroms umfasst keine Arrays. Werden die Werte in stdin oder von der Kommandozeile aus eingegeben? Die beiden sind unterschiedlich, und der Ausdruck "von Standardeingabe in der Befehlszeile" ist inkohärent. –

+0

@WilliamPursell ja die Eingabe wird von STDIN übernommen – Vikram

Antwort

1

Sie sind nah dran! Versuchen Sie stattdessen:

IFS=$'\n' read -d '' -r -a array 

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

Wenn du bist $array von stdin mit read -a lesen, sind Sie nur die erste Zeile zu bekommen.

IFS=$'\n' ändert den internen Feldtrenner von Bash in das Zeilenvorschubsymbol (\n), so dass jede Zeile als separates Feld betrachtet wird, statt nach Token zu suchen, die durch Leerzeichen getrennt sind. -d '' macht read nicht aufhören, am Ende jeder Zeile zu lesen. ((total += i)) ist eine kürzere/sauberere Art, Mathe zu tun.

Hier ist es läuft:

$ seq 1 10 | ./test.sh 
Total: 55 
0
#!/bin/bash 
calcArray() { 
     local total=0 
     for i ;do 
      let total+=$i 
     done 
     echo "${total}" 
} 

Von Ihrem Terminal tun, um diese Quelle script. calcArray 1 2 3 4 5 Zitieren Sie die Argumente nicht. In .bashrc setzen Quelle script, so dass Sie immer calcArray args laufen kann, wiederum ohne Quelle script

Verwandte Themen