Skip to main content

Comment utiliser les conditions de test dans un script Bash

Scripts 2.2 - Bash : condition If et arguments de CLI (Avril 2025)

Scripts 2.2 - Bash : condition If et arguments de CLI (Avril 2025)
Anonim

La commande test peut être utilisée sur la ligne de commande Linux pour comparer un élément à un autre, mais elle est plus couramment utilisée dans les scripts de shell BASH dans le cadre d'instructions conditionnelles contrôlant la logique et le déroulement du programme.

Un exemple basique

Vous pouvez essayer ces commandes simplement en ouvrant une fenêtre de terminal.

test 1 -eq 2 && echo "yes" || echo "non"

La commande ci-dessus peut être décomposée comme suit:

  • test - Cela signifie que vous êtes sur le point d'effectuer une comparaison
  • 1 - Le premier élément que vous allez comparer
  • -eq - Comment comparez-vous. Dans ce cas, vous testez si un nombre est égal à un autre.
  • 2 - L'élément que vous comparez le premier élément
  • && - Exécutez l'instruction suivante si le résultat est true
  • echo "yes" - La commande à exécuter si la comparaison renvoie true
  • || - Exécutez l'instruction suivante si le résultat est faux
  • echo "no" - La commande à exécuter si la comparaison renvoie false

En substance, la commande compare 1 à 2 et s’ils correspondent, l’instruction echo "yes" qui est associée à "yes" et s’ils ne correspondent pas, l’instruction echo "no" qui est associée à "no".

Comparer des nombres

Si vous comparez des éléments qui analysent sous forme de nombres, vous pouvez utiliser les opérateurs de comparaison suivants:

  • -eq - la valeur 1 est-elle égale à la valeur 2
  • -ge - la valeur 1 est-elle supérieure ou égale à la valeur 2
  • -gt - est la valeur 1 supérieure à la valeur 2
  • -le - est la valeur 1 inférieure ou égale à la valeur 2
  • -lt - est la valeur 1 inférieure à la valeur 2
  • -ne - la valeur 1 n'est-elle pas égale à la valeur 2

Exemples

test 1 -eq 2 && echo "yes" || echo "non"

(affiche "non" à l'écran car 1 n'est pas égal à 2)

test 1 -ge 2 && echo "yes" || echo "non"

(affiche "non" à l'écran car 1 n'est pas supérieur ou égal à 2)

test 1 -gt 2 && echo "yes" || echo "non"

(affiche "non" à l'écran car 1 n'est pas supérieur à 2)

test 1 -le 2 && echo "yes" || echo "non"

(affiche "oui" à l'écran car 1 est inférieur ou égal à 2)

test 1 -lt 2 && echo "yes" || echo "non"

(affiche "oui" à l'écran car 1 est inférieur ou égal à 2)

test 1 -ne 2 && echo "yes" || echo "non"

(affiche "oui" à l'écran car 1 n'est pas égal à 2)

Comparer du texte

Si vous comparez des éléments qui analysent sous forme de chaînes, vous pouvez utiliser les opérateurs de comparaison suivants:

  • = - la chaîne 1 correspond-elle à la chaîne 2
  • ! = - est la chaîne 1 différente de la chaîne 2
  • -n - est la longueur de chaîne supérieure à 0
  • -z - est la longueur de la chaîne 0

Exemples

test "string1" = "string2" && echo "yes" || echo "non"

(affiche "non" à l'écran car "chaîne1" n'est pas égal à "chaîne2")

test "string1"! = "string2" && echo "yes" || echo "non"

(affiche "oui" à l'écran car "chaîne1" n'est pas égal à "chaîne2")

test -n "chaîne1" & echo "oui" || echo "non"

(affiche "oui" à l'écran car "chaîne1" a une longueur de chaîne supérieure à zéro)

test -z "chaîne1" & echo "oui" || echo "non"

(affiche "non" à l'écran car "chaîne1" a une longueur de chaîne supérieure à zéro)

Comparer des fichiers

Si vous comparez des fichiers, vous pouvez utiliser les opérateurs de comparaison suivants:

  • -ef - Les fichiers ont-ils les mêmes numéros de périphérique et d'inode (sont-ils le même fichier)
  • -nt - Le premier fichier est-il plus récent que le second
  • -ot - Le premier fichier est-il plus ancien que le second
  • -b - Le fichier existe et est bloqué spécial
  • -c - Le fichier existe et est un caractère spécial
  • -d - Le fichier existe et est un répertoire
  • -e - Le fichier existe
  • -f - Le fichier existe et est un fichier normal
  • -g - Le fichier existe et a le numéro de groupe spécifié
  • -G - Le fichier existe et propriétaire par le groupe de l'utilisateur
  • -h - Le fichier existe et est un lien symbolique
  • -k - Le fichier existe et a son sticky bit défini
  • -L - Identique à -h
  • -O - ​​Le fichier existe vous êtes le propriétaire
  • -p - Le fichier existe et est un canal nommé
  • -r - Le fichier existe et est lisible
  • -s - Le fichier existe et a une taille supérieure à zéro
  • -S - Le fichier existe et est une socket
  • -t - Le descripteur de fichier est ouvert sur un terminal
  • -u - Le fichier existe et le bit set-user-id est défini
  • -w - Le fichier existe et est accessible en écriture
  • -x - Le fichier existe et est exécutable

Exemples

test / chemin / vers / fichier1 -nt / chemin / vers / fichier2 && echo "oui"

(Si fichier1 est plus récent que fichier2, le mot "oui" sera affiché)

test -e / chemin / vers / fichier1 && echo "oui"

(si le fichier 1 existe, le mot "oui" sera affiché)

test -O / chemin / vers / fichier1 && echo "oui"

(si vous possédez file1, le mot "oui" est affiché ")

Terminologie

  • Bloc spécial - Le fichier est un périphérique de bloc, ce qui signifie que les données sont lues en blocs d'octets. Ce sont généralement des fichiers de périphérique tels que des disques durs.
  • Caractère spécial - Le fichier est traité immédiatement lorsque vous l'écrivez et constitue généralement un périphérique tel qu'un port série.

Comparer plusieurs conditions

Jusqu'ici, tout a été comparant une chose à une autre, mais si vous voulez comparer deux conditions?

Par exemple, si un animal a 4 pattes et va "moo", c'est probablement une vache. Le simple fait de vérifier 4 pattes ne garantit pas que vous avez une vache, mais vérifier le son qu’elle fait fait certainement.

Pour tester les deux conditions à la fois, utilisez l’énoncé suivant:

test 4 -eq 4 -a "moo" = "moo" && echo "c'est une vache" || echo "ce n'est pas une vache"

La partie clé ici est le -a qui représente et .

Il existe une méthode plus efficace et plus couramment utilisée pour effectuer le même test, à savoir:

test 4 -eq 4 && test "moo" = "moo" && echo "c'est une vache" || echo "ce n'est pas une vache"

Vous pouvez également effectuer un autre test en comparant deux instructions. Si l'une des deux est vraie, affichez une chaîne. Par exemple, si vous souhaitez vérifier qu'un fichier nommé "fichier1.txt" existe ou qu'un fichier nommé "fichier1.doc" existe, vous pouvez utiliser la commande suivante:

test -e fichier1.txt -o -e fichier1.doc && echo "fichier1 existe" || echo "fichier1 n'existe pas"

La partie clé ici est le -o qui signifie ou .

Il existe une méthode plus efficace et plus couramment utilisée pour effectuer le même test, à savoir:

test -e fichier1.txt || test -e fichier1.doc && echo "fichier1 existe" || echo "fichier1 n'existe pas"

Élimination du mot clé de test

Vous n'avez pas réellement besoin d'utiliser le mot test pour effectuer la comparaison. Tout ce que vous avez à faire est de placer la déclaration entre crochets comme suit:

-e fichier1.txt && echo "fichier1 existe" || echo "fichier1 n'existe pas"

Le et signifie fondamentalement la même chose que le test.

Maintenant que vous savez ceci, vous pouvez améliorer la comparaison de plusieurs conditions comme suit:

4 -eq 4 && "moo" = "moo" && echo "c'est une vache" || echo "ce n'est pas une vache"-e fichier1.txt || -e fichier1.doc && echo "fichier1 existe" || echo "fichier1 n'existe pas"

Résumé

La commande test est plus utile dans les scripts car vous pouvez tester la valeur d'une variable par rapport à une autre et contrôler le flux de programmes. Sur la ligne de commande standard, vous pouvez l'utiliser pour vérifier si un fichier existe ou non.