%20in%20einer%20For-Schleife%3F.png)
Ich würde gerne ein Äquivalent finden für
cmd 1 && cmd 2 && ... && cmd 20
aber mit Befehlen, die in einer for
Schleife ausgedrückt werden, wie
for i in {1..20}
do
cmd $i
done
Was würden Sie vorschlagen, im zweiten Ausdruck zu ändern, um ein Äquivalent zum ersten zu finden?
Antwort1
Das Äquivalent zu Ihrer ursprünglichen Sequenz wäre:
for i in {1..20}
do
cmd $i || break
done
Der Unterschied zu Amits Antwort besteht darin, dass das Skript nicht beendet wird, d. h. es werden mögliche Befehle ausgeführt, die der Sequenz/Schleife folgen könnten. Beachten Sie, dass der Rückgabestatus der gesamten Schleife mit meinem Vorschlag immer „true“ ist. Dies kann möglicherweise behoben werden, wenn es in Ihrem Fall relevant ist.
Antwort2
Wenn Sie eine einfache Einzeilenlösung wünschen, können Sie einen Befehl erstellen und ihn an Bash senden.
echo "cmd "{1..20}" &&" : | bash
Antwort3
Sie können aus der Schleife ausbrechen, wenn einer von ihnen fehlgeschlagen ist
for i in {1..55}; do
if ! cmd $i; then
exit 1
fi
done
Antwort4
So führe ich meine Aufgaben im Terminal aus, ohne&&
for i in google.com yahoo.com;do ping -c1 $i;echo $i;done
Ähnlich wie Sie diesen Befehl in ein Skript einfügen müssen
for i in google.com yahoo.com
do echo $i;ping -c1 $i;
done
Beide geben mir das gleiche Ergebnis
google.com PING google.com (172.217.26.174) 56(84) Bytes Daten. 64 Bytes von google.com (172.217.26.174): icmp_seq=1 ttl=56 Zeit=259 ms
--- Ping-Statistiken von google.com --- 1 Pakete gesendet, 1 empfangen, 0 % Paketverlust, Zeit 0 ms rtt min/avg/max/mdev = 259,794/259,794/259,794/0,000 ms yahoo.com PING yahoo.com (98.138.253.109) 56(84) Bytes Daten. 64 Bytes von yahoo.com (98.138.253.109): icmp_seq=1 ttl=51 Zeit=398 ms
--- yahoo.com Ping-Statistiken --- 1 Pakete gesendet, 1 empfangen, 0 % Paketverlust, Zeit 0 ms RTT min/avg/max/mdev = 398,974/398,974/398,974/0,000 ms