GNU/Linux >> Linux Esercitazione >  >> Linux

La dichiarazione blocca il meccanismo nello scripting della shell?

In Inizio della programmazione Linux prenotare. C'è una sezione su Blocco dichiarazioni . In quella parte la spiegazione è simile alla seguente.

Blocchi di istruzioni

Se desideri utilizzare più istruzioni in una posizione in cui solo una è consentita, ad esempio in un elenco AND o OR,
puoi farlo racchiudendole tra parentesi graffe {} per creare un blocco di istruzioni. Ad esempio, vedere il codice seguente:

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

Spiega come viene eseguito il codice nel blocco istruzioni...

Risposta accettata:

Il codice all'interno di { ... } esegui esattamente come sarebbe stato eseguito senza le parentesi graffe, tranne che ora dipende dallo stato di uscita di get_confirm .

Se get_confirm esce con stato di uscita zero (“successo”), il blocco viene eseguito, altrimenti no.

È equivalente a

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

(che penso sia più carino)

L'esempio del libro è IMHO non un buon esempio di un uso comune di { ... } . Un esempio migliore sarebbe stato

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

che utilizza un unico reindirizzamento per reindirizzare l'output standard di entrambi i comandi nel { ... } blocco sullo stesso file.

È simile a (e ha lo stesso effetto, in questo caso, di)

( echo 'hello world'; date ) >file

ma le istruzioni all'interno di { ... } viene eseguito nello stesso ambiente della shell, mentre le istruzioni in ( ... ) viene eseguito in una subshell (un ambiente separato).

Puoi vedere la differenza con

{ a=42; }; echo $a

e

( a=1973 ); echo $a

Il primo produrrà 42 mentre il secondo non produrrà 1973 (l'assegnazione avviene in una subshell e non può influire sull'ambiente esterno).

Avviso sulla grammatica:la chiusura } di un { ... } il blocco deve seguire una nuova riga o un ; . { echo 'hello' } non è valido, mentre entrambi { echo 'hello'; } e

{ 
    echo 'hello'
}

sono.


Linux
  1. Visualizzazione di contenuti di valore più elevato negli script della shell?

  2. Come analizzare Json con lo script della shell in Linux?

  3. Come confrontare le stringhe negli script di Bash Shell

  4. Simbolo di apice inverso (`) negli script della shell di Linux

  5. Che cos'è l'utilizzo () nello scripting della shell?

Shell Scripting Parte I:Introduzione agli script bash

Script di shell Parte 4:Strutture di controllo della ripetizione

Bash Scripting – Case Statement

Che cos'è Shebang negli script della shell di Linux?

Shell Scripting Part4 – Input, Output e Reindirizzamento

Tutorial passo passo sullo scripting della shell