Bash:test-if

De Lowgeek wiki

Bash.png

Les conditions

Title2.png

Opérateur de test [ ]

L’opérateur de test « [ ] » retourne « vrai » si la condition est vrai et « faux » dans le cas contraire. Donc cette ligne exécutera la commande «  echo  » seulement si le fichier existe :

<syntaxhighlight lang="bash"> $ [ -f ./test.sh ] && echo "OK" </syntaxhighlight>


Title2.png

Arguments les plus courant de l’opérateur

Option Vrai si

  • -e fichier Le fichier indiqué existe
  • -d répertoire Le répertoire indiqué existe
  • -f fichier Le fichier indiqué est un fichier régulier
  • -h fichier Le fichier indiqué est un lien symbolique
  • chaine1 = chaine2 Les deux chaînes sont identiques
  • val1 -eq val2 Les deux valeurs sont égales
  • val1 -ge val2 val1 >= val2
  • val1 -gt val2 val1 > val2
  • val1 -le val2 val1 <= val2
  • val1 -lt val2 val1 < val2
  • val1 -ne val2 val1 != val2
  • Condition (if...else...fi)


Title2.png

Syntaxe générale

<syntaxhighlight lang="bash"> if condition ; then

...

else

...

fi </syntaxhighlight>

Cette instruction s’utilise en générale avec l’opérateur de test détaillé au chapitre précédent. Exemple :

<syntaxhighlight lang="bash"> if [ -f ./test.sh ] ; then

echo "OK"

fi </syntaxhighlight>

Ou sur une seule ligne :

<syntaxhighlight lang="bash"> if [ -f ./test.sh ] ; then echo "OK" ; fi </syntaxhighlight>

Ou vérifier l'absence du fichier :

<syntaxhighlight lang="bash"> if [ ! -f ./test.sh ] ; then

echo "OK"

fi </syntaxhighlight>

Il est aussi possible de cumuler des conditions :

<syntaxhighlight lang="bash"> if [ -f ./test.sh ] && [ "${test} == "1" ]

   then echo "OK"

fi </syntaxhighlight>

Ou bien avoir une condition OU une autre:

<syntaxhighlight lang="bash"> if [ -f ./test.sh ] || [ "${test} == "1" ]

   then echo "OK"

fi </syntaxhighlight>

Autre syntaxe possible :

<syntaxhighlight lang="bash"> if [[ "${VARIABLE}" == 'Ok' || ( "${VARIABLE}" == 'NOK' && "${TEST}" == 'OK') ]]

   then echo "OK"

fi </syntaxhighlight>



Title2.png

Condition « case...esac »

Syntaxe générale :

<syntaxhighlight lang="bash"> case expression in

motif1) commande 1 ;;
motif2) commande 2 ;;
...

esac </syntaxhighlight>

Le motif peut contenir

  • * : N’importe quelle chaîne de caractères
  •  ? : N’importe quel caractère
  • [abc] : Alternance de caractères
  • [A-Z] : Suite de caractères
  • | : OU permettant de combiner plusieurs motifs

Exemple :

<syntaxhighlight lang="bash">

  1. ! /bin/bash

while [ -n "$1" ]; do

ping -c 1 -w 1 $1 >/dev/null 2>&1
case $? in
  0) echo -e "$1 \t OK !";;
  1) echo -e "$1 \t injoignable !";;
  2) echo -e "$1 \t inexistant !";;
esac
shift

done </syntaxhighlight>



Title2.png

Tester si un fichier existe

<syntaxhighlight lang="bash"> [ -f /path/to/file ] && echo "File exists" || echo "File does not exists" </syntaxhighlight>


Title2.png

Tester si un dossier existe

<syntaxhighlight lang="bash"> [ -d /path/to/folder ] && echo "Directory exists" || echo "Directory does not exists" </syntaxhighlight>