Welcome to Our Website

Scripts Bash Tutoriel – 5. Si les Déclarations

Si Déclarations!

décisions, décisions.

Introduction

Bash si les déclarations sont très utiles. Dans cette section de notre tutoriel Bash Scripting, vous apprendrez comment utiliser les instructions if dans vos scripts Bash pour automatiser les tâches.

les instructions If (et, étroitement liées, les instructions case) nous permettent de prendre des décisions dans nos scripts Bash. Ils nous permettent de décider d’exécuter ou non un morceau de code en fonction des conditions que nous pouvons définir., Les instructions If, combinées avec des boucles (que nous verrons dans la section suivante) nous permettent de créer des scripts beaucoup plus complexes qui peuvent résoudre des tâches plus importantes.

comme ce que nous avons vu dans les sections précédentes, leur syntaxe est très spécifique, alors restez au courant de tous les petits détails.

Instructions If De Base

Une instruction IF de base dit effectivement, si un test particulier est vrai, alors effectuez un ensemble donné d’actions. Si ce n’est pas vrai, n’effectuez pas ces actions., Si suit le format ci-dessous:

if
then
<commands>
fi

Tout ce qui se trouve entre then ET fi (SI en arrière) ne sera exécuté que si le test (entre les crochets) est vrai.

prenons un exemple simple:

if_example.sh

  1. #!/bin/bash
  2. # de Base si l’instruction
  3. si
  4. ensuite,
  5. echo Hey que l\’un grand nombre.,
  6. pwd
  7. fi
  8. date

décomposons:

  • ligne 4 – voyons si le premier argument de ligne de commande est supérieur à 100
  • lignes 6 et 7 – ne sera exécuté que si le test sur la ligne 4 renvoie true. Vous pouvez avoir autant de commandes ici que vous le souhaitez.
  • ligne 6 – la barre oblique inverse ( \ ) devant le guillemet simple ( ‘ ) est nécessaire car le guillemet simple a une signification spéciale pour bash et nous ne voulons pas de cette signification spéciale. La barre oblique inverse échappe à la signification spéciale pour en faire une simple citation simple normale.,
  • La Ligne 8 – fi signale la fin de l’instruction if. Toutes les commandes après cela seront exécutées normalement.
  • ligne 10-parce que cette commande est en dehors de l’instruction if, elle sera exécutée quel que soit le résultat de l’instruction if.
  1. ./if_example.sh 15
  2. Ven 5 Fév à 9:06:30 2021
  3. ./if_example.sh 150
  4. Hey c’est un grand nombre.
  5. /home/ryan/bin
  6. Ven 5 Fév à 9:06:30 2021

Il est toujours bon de tester vos scripts avec entrée qui couvre les différents scénarios possibles.,

Test

Les crochets ( ) dans l’instruction if ci-dessus sont en fait une référence à la commande test. Cela signifie que tous les opérateurs de test peuvent être utilisés ici. Recherchez la page de manuel pour le test pour voir tous les opérateurs possibles (il y en a pas mal), mais certains des plus courants sont répertoriés ci-dessous.

Operator Description
! EXPRESSION L’EXPRESSION est fausse.
-n CHAÎNE La longueur de la CHAÎNE est supérieure à zéro.,
-Z STRING la longueur de la chaîne est nulle (c’est-à-dire qu’elle est vide).
MOT1 = STRING2 MOT1 est égal à CHAÎNE2
MOT1 != STRING2 MOT1 n’est pas égal à CHAÎNE2
INTEGER1 -eq INTEGER2 INTEGER1 est numériquement égal à INTEGER2
INTEGER1 -gt INTEGER2 INTEGER1 est numériquement supérieure INTEGER2
INTEGER1 -lt INTEGER2 INTEGER1 est numériquement inférieure INTEGER2
-d FICHIER FICHIER existe et est un répertoire.,
-E fichier le fichier existe.
-fichier r le fichier existe et l’autorisation de lecture est accordée.
-S fichier le fichier existe et sa taille est supérieure à zéro (ie. il n’est pas vide).
-W fichier le fichier existe et l’autorisation d’écriture est accordée.
-X FILE le fichier existe et l’autorisation execute est accordée.

quelques remarques:

  • = est légèrement différente à -eq. retournera false as = fait une comparaison de chaîne (ie., caractère pour caractère identique) alors que-eq fait une comparaison numérique, ce qui signifie que cela retournera vrai.
  • lorsque nous nous référons au fichier ci-dessus, nous signifions en fait un chemin. N’oubliez pas qu’un chemin peut être absolu ou relatif et peut faire référence à un fichier ou un répertoire.
  • parce que n’est qu’une référence au test de commande, nous pouvons expérimenter et résoudre des problèmes avec test sur la ligne de commande pour nous assurer que notre compréhension de son comportement est correcte.
  1. test 001 = 1
  2. echo $?
  3. 1
  4. test 001 -eq 1
  5. echo $?,
  6. 0
  7. touch monfichier
  8. test-s monfichier
  9. echo $?
  10. 1
  11. ls /etc > monfichier
  12. test-s monfichier
  13. echo $?
  14. 0

nous allons le décomposer:

  • Ligne 1 – Effectuer une chaîne de caractères en fonction de comparaison. Le Test n’imprime pas le résultat, nous vérifions donc son statut de sortie, ce que nous ferons sur la ligne suivante.
  • Ligne 2 – La variable $? contient l’état de sortie de la commande précédemment exécutée (dans ce cas test). 0 signifie vrai (ou succès). 1 = faux (ou échec).,
  • Ligne 4 – Cette fois, nous effectuons une comparaison numérique.
  • Ligne 7 – Créer un nouveau fichier myfile (en supposant que myfile n’existe pas déjà).
  • ligne 8 – la taille de mon fichier est-elle supérieure à zéro?
  • ligne 11-rediriger du contenu dans mon fichier afin que sa taille soit supérieure à zéro.
  • ligne 12-testez à nouveau la taille de mon fichier. Cette fois, c’est vrai.

indentation

vous remarquerez que dans l’instruction if ci-dessus, nous avons indenté les commandes qui ont été exécutées si l’instruction était true., Ceci est appelé indentation et est une partie importante de l’écriture d’un bon code propre (dans n’importe quelle langue, pas seulement les scripts Bash). L’objectif est d’améliorer la lisibilité et de rendre plus difficile pour nous de faire des erreurs simples et stupides. Il n’y a pas de règles concernant l’indentation dans Bash, vous pouvez donc indenter ou ne pas indenter comme vous le souhaitez et vos scripts fonctionneront toujours exactement de la même manière. Je vous recommande fortement de mettre votre code en retrait (d’autant plus que vos scripts grossissent) sinon vous aurez de plus en plus de mal à voir la structure dans vos scripts.,

instructions if imbriquées

parlant d’indentation. Voici un exemple parfait de quand cela vous facilite la vie. Vous pouvez avoir autant d’instructions if que nécessaire dans votre script. Il est également possible d’avoir une instruction if à l’intérieur d’une autre instruction if. Par exemple, nous pouvons analyser un nombre donné sur la ligne de commande comme suit:

décomposons – le:

  • ligne 4-effectuez ce qui suit, uniquement si le premier argument de ligne de commande est supérieur à 100.
  • ligne 8 – Il s’agit d’une légère variation sur l’instruction if., Si nous souhaitons vérifier une expression, Nous pouvons utiliser les doubles crochets comme nous l’avons fait pour les variables.
  • ligne 10 – n’est exécutée que si les deux instructions if sont vraies.

Yo dawg, je vous rassemble comme des déclarations if, donc je mets une déclaration if dans votre déclaration if.

Xzibit

(Xzibit n’a pas vraiment dit cela, mais je suis sûr qu’il l’aurait fait, s’il avait hébergé Pimp My Bash Script.,)

Vous pouvez imbriquer autant d’instructions if que vous le souhaitez, mais en règle générale, si vous devez imbriquer plus de 3 niveaux de profondeur, vous devriez probablement penser à réorganiser votre logique.

if Else

Parfois, nous voulons effectuer un certain ensemble d’actions si un énoncé est vrai, et un autre ensemble d’actions si elle est fausse. Nous pouvons accommoder cela avec le mécanisme else.,

si
puis
<commandes>
else
<autres commandes>
if

Désormais, on pouvait facilement lire à partir d’un fichier si elle est fournie comme argument de ligne de commande, d’autre lire depuis l’entrée standard.

else.sh

  1. #!/bin/bash
  2. # else exemple
  3. si
  4. ensuite,
  5. nl $1
  6. else
  7. nl /dev/stdin
  8. if

Si Elif Else

Parfois, on peut avoir une série de conditions qui peuvent conduire à des chemins différents.,

si
puis
<commandes>
elif
puis
<différentes commandes>
else
<autres commandes>
if

Par exemple, il peut être le cas que si vous avez 18 ans ou plus vous pouvez aller à la fête. Si vous ne l’êtes pas mais que vous avez une lettre de vos parents, vous pouvez y aller mais devez être de retour avant minuit. Sinon, vous ne peut pas aller.

Vous pouvez avoir autant de branches elif que vous le souhaitez. La finale else est également facultative.,

opérations booléennes

parfois, nous ne voulons faire quelque chose que si plusieurs conditions sont remplies. D’autres fois, nous aimerions effectuer l’action si l’un des plusieurs condition est remplie. Nous pouvons les accueillir avec des opérateurs booléens.

  • et &&
  • ou – ||

Par exemple, peut-être que nous ne voulons effectuer une opération si le fichier est lisible et a une taille plus grande que zéro.

and.sh

  1. #!,/bin/bash
  2. # et exemple
  3. si &&
  4. ensuite,
  5. echo Ce fichier est utile.
  6. if

Peut-être que nous voudrions effectuer quelque chose de légèrement différent si l’utilisateur est bob ou andy.

or.sh

  1. #!/bin/bash
  2. # ou par exemple
  3. si ||
  4. ensuite,
  5. ls -alh
  6. else
  7. ls
  8. if

Cas des États

Parfois, nous souhaitera peut-être prendre des chemins différents, basés sur une variable correspondant à une série de motifs., Nous pourrions utiliser une série de déclarations if et elif, mais cela deviendrait bientôt inutile. Heureusement, il existe une déclaration de CAs qui peut rendre les choses plus propres., It’s a little hard to explain so here are some examples to illustrate:

case <variable> in
<pattern 1>)
<commands>
;;
<pattern 2>)
<other commands>
;;
esac

Here is a basic example:

case.sh

  1. #!,/bin/bash
  2. # exemple de cas
  3. cas 1 $
  4. démarrage)
  5. echo de départ
  6. ;;
  7. stop)
  8. echo stopper
  9. ;;
  10. redémarrer)
  11. echo redémarrage
  12. ;;
  13. *
  14. echo don\’t savoir
  15. ;;
  16. esac

nous allons le décomposer:

  • Ligne 4 – Cette ligne commence la casemechanism.
  • ligne 5-Si $1 est égal à ‘start’, effectuez les actions suivantes. l’ ) signifie la fin de la répétition.,
  • ligne 7 – nous identifions la fin de cet ensemble d’instructions avec un double point-virgule ( ;; ). La suite c’est le prochain cas à considérer.
  • Ligne 14 – Rappelez-vous que le test pour chaque cas est un modèle. * Représente n’importe quel nombre de caractères. Il est essentiellement un fourre-tout si pour si aucun des autres cas correspondent. Il n’est pas nécessaire, mais est souvent utilisé.
  • ligne 17-esac est à l’envers et indique que nous sommes à la fin de l’instruction case. Toutes les autres instructions après cela seront exécutées normalement.
  1. ./case.sh commencer
  2. départ
  3. .,/case.sh restart
  4. redémarrage
  5. ./case.sh bla
  6. ne sais pas

Maintenant, regardons un exemple légèrement plus complexe où les modèles sont utilisés un peu plus.

Résumé

si Exécuter une série de commandes si un test est vrai. sinon, si le test n’est pas vrai, effectuez un ensemble différent de commandes. elif si le test précédent a renvoyé false, essayez celui-ci. && Effectuer l’opération. / / Effectuez l’opération or. case choisissez un ensemble de commandes à exécuter en fonction d’une chaîne correspondant à un motif particulier.,
indentation L’indentation rend votre code beaucoup plus facile à lire. Cela devient de plus en plus important à mesure que vos scripts Bash s’allongent. Planification maintenant que vos scripts deviennent un peu plus complexes, vous voudrez probablement passer un peu de temps à réfléchir à la façon dont vous les structurez avant de plonger.

Activités

Maintenant, nous allons prendre certaines décisions.

  • créez un script Bash qui prendra 2 nombres comme arguments de ligne de commande. Il imprimera à l’écran le plus grand des deux nombres.,
  • créez un script Bash qui acceptera un fichier comme argument de ligne de commande et l’analysera de certaines manières. par exemple. vous pouvez vérifier si le fichier est exécutable ou inscriptible. Vous devez imprimer un certain message si vrai et un autre si faux.
  • créez un script Bash qui imprimera un message en fonction du jour de la semaine (par exemple. « Happy hump day » pour le jour du mariage, « TGIF » pour le vendredi, etc.).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *