2009-08-25 7 views
1

ich eine Unix-Kommandofolge habe, dass so etwas geht: Jetzteinen Unix-Shell-Befehl ausführen, wenn der Ausgang nicht über eine bestimmte Anzahl von Zeilen

command1 | command2 | command3 | wc -l 

, dass ich die Anzahl der Zeilen, ich möchte etwas tun (einen bestimmten Befehl ohne Eingaben ausführen), wenn die Anzahl der Zeilen nicht einer bestimmten Zahl entspricht. Mein Shell-Skript ist fantastisch rostig (vielleicht 10 Jahre oder mehr, seit ich viel Unix-Arbeit gemacht habe), also weiß ich nicht, wie ich diese Art von Bedingung zu einer Befehlsfolge hinzufügen soll. Weiß jemand?

Antwort

2

Kinda hässlich .. aber das funktioniert.

# test $(seq 10 | wc -l) -eq 10 && echo "there's 10" 
there's 10 
# test $(seq 11 | wc -l) -eq 10 && echo "there's 10" 

ist nichts echo ed im zweiten Fall

+0

, die mich an meiner College-Zeit erinnert, als unsere Unix-Programmierung Lehrer rieten uns, nicht unsere kompilierte Programme „test“ zu nennen. – quillbreaker

+0

scheint ich Backticks anstelle von $() Syntax für csh, aber sonst funktioniert das großartig. Vielen Dank. – quillbreaker

+1

Sie haben sie benannt? .. Ich war glücklich mit 'a.out': p – eduffy

3
numberOfLines=$(command1 | command2 | command3 | wc -l) 
if [ "${numberOfLines}" == "7" ]; then 
    echo "Hooray." 
fi 
5

Sie müssen den Ausgang Ihres wc Befehl erfassen und verwenden if einen anderen Befehl auszuführen, wenn es um die Anzahl der Zeilen nicht gleich ist Sie wollen, wie zum Beispiel:

count=$(command1 | command2 | command3 | wc -l) 
if [[ $count -ne 19 ]] ; then 
    command4 
fi 
+0

+1 für den numerischen Vergleich –

Verwandte Themen