GNU/Linux >> Tutoriels Linux >  >> Linux

Commandes couplées avec des opérateurs de contrôle dans Bash

Des commandes composées simples, telles que l'enchaînement de plusieurs commandes dans une séquence sur la ligne de commande, sont souvent utilisées. Ces commandes sont séparées par des points-virgules, qui définissent la fin d'une commande. Pour créer une simple série de commandes shell sur une seule ligne, séparez simplement chaque commande à l'aide d'un point-virgule, comme ceci :

command1 ; command2 ; command3 ; command4 ; 

Vous n'avez pas besoin d'ajouter un point-virgule final, car appuyer sur la touche Entrée implique la fin de la commande finale, mais vous pouvez l'ajouter pour plus de cohérence.

Le Terminal Linux

  • Les 7 meilleurs émulateurs de terminaux pour Linux
  • 10 outils de ligne de commande pour l'analyse de données sous Linux
  • Télécharger maintenant :Aide-mémoire SSH
  • Aide-mémoire des commandes Linux avancées
  • Tutoriels de ligne de commande Linux

Toutes les commandes s'exécuteront sans problème, tant qu'aucune erreur ne se produit. Mais que se passe-t-il si une erreur se produit ? Nous pouvons anticiper et autoriser les erreurs en utilisant le && et || opérateurs de contrôle intégrés à Bash. Ces deux opérateurs de contrôle fournissent un certain contrôle de flux et nous permettent de modifier la séquence d'exécution du code. Le point-virgule et la nouvelle ligne sont également considérés comme des opérateurs de contrôle Bash.

Le && l'opérateur dit simplement "si la commande1 réussit, alors exécutez la commande2". Si command1 échoue pour une raison quelconque, command2 ne s'exécutera pas. Cette syntaxe ressemble à :

command1 && command2

Cela fonctionne car chaque commande renvoie un code au shell qui indique si elle s'est terminée avec succès ou a échoué lors de l'exécution. Par convention, un code de retour (RC) de 0 (zéro) indique un succès et tout nombre positif indique un certain type d'échec. Certains outils d'administration système renvoient simplement un 1 pour indiquer tout échec, mais beaucoup utilisent d'autres codes numériques positifs pour indiquer le type d'échec.

Le $ ? du shell Bash variable peut être vérifiée très facilement par un script, par la commande suivante dans une liste de commandes, ou même directement par un administrateur système. Regardons les RC. Nous pouvons exécuter une simple commande et vérifier immédiatement le RC, qui concernera toujours la dernière commande exécutée.

[student@studentvm1 ~]$ ll ; echo "RC = $?"
total 284
-rw-rw-r--  1 student student   130 Sep 15 16:21 ascii-program.sh
drwxrwxr-x  2 student student  4096 Nov 10 11:09 bin
<snip>
drwxr-xr-x. 2 student student  4096 Aug 18 10:21 Videos
RC = 0
[student@studentvm1 ~]$

Ce RC est 0, ce qui signifie que la commande s'est terminée avec succès. Essayez maintenant la même commande sur un répertoire où nous n'avons pas les permissions.

[student@studentvm1 ~]$ ll /root ; echo "RC = $?"
ls: cannot open directory '/root': Permission denied
RC = 2
[student@studentvm1 ~]$

La signification de ce RC peut être trouvée dans le ls la page de manuel de la commande.

Essayons le && opérateur de contrôle tel qu'il pourrait être utilisé dans un programme en ligne de commande. Nous allons commencer par quelque chose de simple :créez un nouveau répertoire et, si cela réussit, créez-y un nouveau fichier.

Nous avons besoin d'un répertoire où nous pouvons créer d'autres répertoires. Tout d'abord, créez un répertoire temporaire dans votre répertoire personnel où vous pourrez effectuer des tests.

[student@studentvm1 ~]$ cd ; mkdir testdir

Créez un nouveau répertoire dans ~/testdir , qui doit être vide car vous venez de le créer, puis créez un nouveau fichier vide dans ce nouveau répertoire. La commande suivante effectuera ces tâches.

[student@studentvm1 ~]$ mkdir ~/testdir/testdir2 && touch ~/testdir/testdir2/testfile1 
[student@studentvm1 ~]$ ll ~/testdir/testdir2/
total 0
-rw-rw-r-- 1 student student 0 Nov 12 14:13 testfile1
[student@studentvm1 ~]$

Nous savons que tout a fonctionné comme il se doit car le testdir répertoire est accessible et accessible en écriture. Modifier les autorisations sur testdir il n'est donc plus accessible à l'utilisateur student comme suit :

[student@studentvm1 ~]$ chmod 076 testdir ; ll | grep testdir
d---rwxrw-. 3 student student  4096 Nov 12 14:13 testdir
[student@studentvm1 ~]$

Utilisation du grep commande après la longue liste (ll ) affiche la liste pour testdir . Vous pouvez voir que l'utilisateur student n'a plus accès au testdir annuaire. Maintenant, lançons presque la même commande qu'avant, mais modifions-la pour créer un nom de répertoire différent dans testdir .

[student@studentvm1 ~]$ mkdir ~/testdir/testdir3 && touch ~/testdir/testdir3/testfile1 
mkdir: cannot create directory ‘/home/student/testdir/testdir3’: Permission denied
[student@studentvm1 ~]$

Bien que nous ayons reçu un message d'erreur, l'utilisation de && l'opérateur de contrôle empêche le toucher commande de s'exécuter car une erreur s'est produite lors de la création de testdir3 . Ce type de contrôle de flux logique de ligne de commande peut empêcher les erreurs de s'aggraver et de créer un véritable gâchis. Mais compliquons un peu les choses.

Le || L'opérateur de contrôle nous permet d'ajouter une autre commande qui s'exécute lorsque l'instruction initiale du programme renvoie un code supérieur à zéro.

[student@studentvm1 ~]$ mkdir ~/testdir/testdir3 && touch ~/testdir/testdir3/testfile1 || echo "An error occurred while creating the directory."
mkdir: cannot create directory ‘/home/student/testdir/testdir3’: Permission denied
An error occurred while creating the directory.
[student@studentvm1 ~]$

Notre syntaxe de commande composée utilisant le contrôle de flux prend cette forme générale lorsque nous utilisons le && et || opérateurs de contrôle :

preceding commands ; command1 && command2 || command3 ; following commands

La commande composée utilisant les opérateurs de contrôle peut être précédée et suivie d'autres commandes qui peuvent être liées à celles de la section de contrôle de flux mais qui ne sont pas affectées par le contrôle de flux. Toutes ces commandes s'exécuteront sans tenir compte de tout ce qui se passe dans la commande composée de contrôle de flux.

Ces opérateurs de contrôle de flux peuvent rendre le travail en ligne de commande plus efficace en gérant les décisions et en nous informant lorsqu'un problème s'est produit. Je les utilise directement en ligne de commande ainsi que dans les scripts.

Vous pouvez nettoyer en tant qu'utilisateur root pour supprimer le répertoire et son contenu.

[root@studentvm1 ~]# rm -rf /home/student/testdir

Comment utilisez-vous les opérateurs de contrôle Bash ? Faites-le nous savoir dans la section des commentaires.


Linux
  1. Regardez les commandes et les tâches avec la commande Linux watch

  2. La différence entre les opérateurs bash [[ Vs [ Vs ( Vs ((?

  3. Le script Bash avec `set -e` ne s'arrête pas sur la commande `… &&…` ?

  4. La commande Rm dans le script Bash ne fonctionne pas avec la variable ?

  5. Commandes Linux les plus simples avec 10 exemples

Comment corriger facilement les commandes Bash mal orthographiées sous Linux

La commande Bash Echo expliquée avec des exemples sous Linux

Bash Scripting - Commande Printf expliquée avec des exemples

Contrôler l'utilisation des ressources système avec la commande Ulimit

Réussissez à sauver la journée avec les commandes d'historique de Bash

Exécuter des commandes avec une limite de temps dans Ubuntu 20.04