GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Anweisung blockiert Mechanismus im Shell-Scripting?

In Beginn der Linux-Programmierung Buchen. Es gibt einen Abschnitt über Anweisungsblock . In diesem Abschnitt sieht die Erklärung wie folgt aus.

Anweisungsblöcke

Wenn Sie mehrere Anweisungen an einer Stelle verwenden möchten, an der nur eine zulässig ist, wie z. B. in einer UND- oder ODER-Liste,
können Sie dies tun, indem Sie sie in geschweifte Klammern {} einschließen, um einen Anweisungsblock zu bilden. Sehen Sie sich beispielsweise den folgenden Code an:

get_confirm && {
    grep −v "$cdcatnum" $tracks_file > $temp_file 
    cat $temp_file > $tracks_file
    echo
    add_record_tracks
}

Bitte erklären Sie, wie der Code im Anweisungsblock ausgeführt wird…

Akzeptierte Antwort:

Der Code in { ... } genau so ausführen, wie es ohne die geschweiften Klammern ausgeführt worden wäre, außer dass es jetzt vom Exit-Status von get_confirm abhängig ist .

Wenn get_confirm mit einem Null-Exit-Status („Erfolg“) beendet wird, wird der Block ausgeführt, andernfalls nicht.

Es ist äquivalent zu

if get_confirm; then
    # the contents of the block goes here
fi

(was meiner Meinung nach schöner aussieht)

Das Beispiel des Buches ist meiner Meinung nach kein gutes Beispiel für eine übliche Verwendung von { ... } . Ein besseres Beispiel wäre gewesen

{ echo 'hello world'; date; } >file

die eine einzige Umleitung verwendet, um die Standardausgabe beider Befehle im { ... } umzuleiten Block in dieselbe Datei.

Dies ist ähnlich (und hat in diesem Fall den gleichen Effekt wie)

( echo 'hello world'; date ) >file

aber die Anweisungen innerhalb von { ... } wird in derselben Umgebung wie die Shell ausgeführt, während die Anweisungen in ( ... ) wird in einer Subshell (einer separaten Umgebung) ausgeführt.

Sie können den Unterschied mit

sehen
{ a=42; }; echo $a

und

( a=1973 ); echo $a

Der erste gibt 42 aus während die zweite nicht 1973 ausgibt (Die Zuweisung erfolgt in einer Unterschale und kann die Umgebung außerhalb nicht beeinflussen).

Hinweis zur Grammatik:Der abschließende } eines { ... } block muss auf einen Zeilenumbruch oder einen ; folgen . { echo 'hello' } ist nicht gültig, während sowohl { echo 'hello'; } und

{ 
    echo 'hello'
}

sind.


Linux
  1. Dateideskriptoren und Shell-Scripting?

  2. Anzeigen von Inhalten mit dem höchsten Wert in Shell-Skripten?

  3. Wie parse ich Json mit Shell-Scripting in Linux?

  4. Backtick-Symbol (`) in Linux Shell Scripting

  5. Suchen und Ersetzen in Shell-Skripten

Shell-Scripting Teil I:Erste Schritte mit Bash-Scripting

Shell-Scripting Teil 4:Wiederholungskontrollstrukturen

Bash-Skripting – Case-Statement

Was ist Shebang in Linux Shell Scripting?

Shell-Scripting Teil 4 – Eingabe, Ausgabe und Umleitung

Shell-Scripting Schritt-für-Schritt-Tutorial