Wie ersetze ich AND (&&) in einer For-Schleife?

Wie ersetze ich AND (&&) in einer For-Schleife?

Ich würde gerne ein Äquivalent finden für

cmd 1 && cmd 2 && ... && cmd 20

aber mit Befehlen, die in einer forSchleife 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

verwandte Informationen