Welchen Zweck hat der Boolesche Ausdruck, der einen Exit-Code in diesem Shell-Skript enthält?

Welchen Zweck hat der Boolesche Ausdruck, der einen Exit-Code in diesem Shell-Skript enthält?

Ich habe ein Problem, das durch diese Antwort gelöst wirdhttps://superuser.com/a/508761

Jetzt muss ich es erweitern, um andere Dinge zu tun, aber zuerst muss ich besser verstehen, wie es funktioniert, bevor ich es ändern kann. Hier ist das betreffende Skript:

#!/bin/bash

(( $# != 2 )) && exit 1

for f in *; do
  newf="${f//$1/$2}"
  if [[ $f != $newf ]]; then
    mv "$f" "$newf"
  fi
done

Was macht (( $# != 2 )) && exit 1das? Ich hatte wenig Glück, online Erklärungen zu finden: Ich habe herausgefunden, was jede Komponente ist, aber nicht, was die gesamte Zeile im Skript als Ganzes macht. Die Antwort hat diese Zeile nicht erklärt. Der Verfasser war zuletzt vor über 2 Jahren online und ich wollte keine 5 Jahre alte Frage wieder aufleben lassen, also bin ich hier.

Antwort1

Es ist ein Kontrolloperator

AusMann verprügeln:

Die Steueroperatoren && und || bezeichnen UND-Listen bzw. ODER-Listen.
 Eine UND-Liste hat die Form 
command1 && command2
Befehl2 wird genau dann ausgeführt, wenn Befehl1 einen Exit-Status von Null zurückgibt. [..schneiden..] Der Rückgabestatus von AND- und OR-Listen ist der Exit-Status des letzten Befehls. in der Liste ausgeführt.
AKontrolloperatorIst
    Ein Token, das eine Kontrollfunktion ausführt. Es ist eines der folgenden Symbole:
        || & && ; ;; ( ) |
 

(Credits)

Lesen Sie es in diesem Fall also nicht &&als Booleschen Operator. Sie wissen jetzt also, wann exit 1es ausgeführt wird – nur bei Erfolg des vorherigen Befehls (wenn der Exit-Status Null war).

Sieh dir das anServerfehler-AntwortfürErklärung &&in 3 verschiedenen Kontexten in Bash.Nützlich, um die Unterschiede zwischen ihnen zu lernen.

Antwort2

Es beendet das Skript an dieser Zeile, wenn nicht genau zwei Argumente an das Skript übergeben wurden.

  • $#ist die Anzahl der Argumente, die beim Aufruf des Skripts übergeben werden, analog zu argcC

  • (( $# != 2 ))gibt einen truey-Code ( 0) zurück, wenn die Anzahl der Argumente ungleich ist2

  • &&führt die rechte Seite nur aus, wenn die linke Seite mit einem Truey-Code beendet wurde. Das bedeutet, dass die rechte Seite ausgeführt wird, wenn die Anzahl der Argumente nicht 2 ist.

  • exit 1beendet das Skript mit dem falschen Exit-Code 1. Dadurch wird das Skript an dieser Stelle abgebrochen und der Anrufer darüber informiert, dass ein Fehler aufgetreten ist.

verwandte Informationen