GNU/Linux >> Tutoriels Linux >  >> Linux

Mécanisme des blocs d'instructions dans les scripts Shell ?

Dans Débuter la programmation Linux livre. Il y a une section sur Statement Block . Dans cette partie, l'explication ressemble à ce qui suit.

Blocs d'instructions

Si vous souhaitez utiliser plusieurs instructions à un endroit où une seule est autorisée, comme dans une liste AND ou OR,
vous pouvez le faire en les mettant entre accolades {} pour créer un bloc d'instructions. Par exemple, consultez le code suivant :

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

Veuillez expliquer comment le code s'exécute dans le bloc d'instructions…

Réponse acceptée :

Le code dans { ... } s'exécute exactement comme il l'aurait été sans les accolades, sauf que cela dépend maintenant du statut de sortie de get_confirm .

Si get_confirm sort avec un état de sortie nul ("succès"), le bloc s'exécute, sinon non.

C'est équivalent à

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

(ce qui me semble plus joli)

L'exemple du livre est IMHO pas un bon exemple d'une utilisation courante de { ... } . Un meilleur exemple aurait été

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

qui utilise une seule redirection pour rediriger la sortie standard des deux commandes dans le { ... } bloquer dans le même fichier.

Ceci est similaire à (et a le même effet, dans ce cas, que)

( echo 'hello world'; date ) >file

mais les instructions dans { ... } s'exécute dans le même environnement que le shell, alors que les instructions dans ( ... ) s'exécute dans un sous-shell (un environnement séparé).

Vous pouvez voir la différence avec

{ a=42; }; echo $a

et

( a=1973 ); echo $a

Le premier affichera 42 alors que le second ne sortira pas 1973 (l'affectation se produit dans un sous-shell et ne peut pas affecter l'environnement extérieur).

Remarque sur la grammaire :le } de fermeture d'un { ... } le bloc doit suivre une nouvelle ligne ou un ; . { echo 'hello' } n'est pas valide, tant que { echo 'hello'; } et

{ 
    echo 'hello'
}

sont.


Linux
  1. Descripteurs de fichiers et scripts shell ?

  2. Symbole Backtick (`) dans Linux Shell Scripting

  3. Script de shell Linux :nombre hexadécimal en chaîne binaire

  4. Rechercher et remplacer dans les scripts shell

  5. Qu'est-ce que l'utilisation () dans les scripts shell ?

Shell Scripting Partie I :Premiers pas avec les scripts bash

Shell Scripting Partie 4 :Structures de contrôle de répétition

Bash Scripting - Déclaration de cas

Qu'est-ce que Shebang dans Linux Shell Scripting ?

Shell Scripting Part4 - Entrée, sortie et redirection

Tutoriel étape par étape sur les scripts shell