Structure de contrôle des scripts shell

Les tests (if)

Les tests permettent d'éxécuter des commandes en fonction de l'évaluation d'une condition (variable ou commande)

if [ $# -ne 3 ]
then
 echo "erreur"
else
 cat $1
fi  

Les sélections (case)

Les sélections permettent d'exécuter différentes commandes en fonction de la valeur d'une variable, d'une expression ou le résultat d'une commande

case $(date +%u) in
 1)
 echo Lundi
 ;;
 2)
 echo Mardi
 ;;
 *)
 echo "un autre jour"
 ;;
esac  

Les boucles (for)

Les boucles for permettent d'exécuter un bloc de commande pour chaque élément de la liste.

On peut définir une liste de manière explicite

for i in 1 2 3 4 5 

do 

  echo "i=$i" 

done

 

for i in {1..5..1} (la même chose)

do 

  echo "i=$i" 

done  

 

for ((i=1; i<=5; i++)) (encore la même chose)

do 

  echo "i=$i" 

done 

 ou via une commande

for nom in $(who | cut -c1-9)
do
 No=$(grep "$nom" /etc/passwd 2> /dev/null | cut -d: -f3)
 echo $No
done
ou via une liste de fichiers

for file in /etc/*

do  

  echo "$(file $file)"

done

Les boucles (while)

Les boucles permettent d'exécuter plusieurs fois un bloc de commande. L'arrêt de cette boucle se fait en évaluant une variable ou le résultat d'une commande

x=1
while [ $x -le 5 ]
do
  echo "Welcome $x times"
  x=$(( $x + 1 ))
done

Les boucles infinie (sans condition d'interruption) permettent de garder le shell à l'écoute. Dans ce cas il faut utiliser la commande "exit" ou "break" pour sortir de la boucle

while 1  ou while (true)  ou while :

do   

  read rep  

  echo $rep  

  if [ $rep = "Quit" ]    

  then 

    exit 0  

  fi

done


Documentation : http://www.shellunix.com/ksh.html
http://abs.traduc.org/abs-fr/
http://www.patpro.net/blog/index.php/2006/01/29/9-quelques-notions-sur-les-boucles-dans-bash/
Modifié le: lundi 15 juillet 2013, 23:30