next up previous contents Next: Arrêt de boucles et Up: Les scripts du shell. Previous: Boucles: instructions while et   Table des matières  

8.3 Boucles: l'instruction for.

La commande for permet également l'exécution de commandes à de multiples reprises. Elle fonctionne de la manière suivante:

for i in vache mouton coq cochon

do

     echo "$i est un animal de ferme"

done

echo -e "mais\nLes GNUs ne sont pas des animaux de ferme" 



La commande for prend chaque chaîne de caractères après in et exécute les lignes entre do et done avec i remplacé par chaque chaîne. Les chaînes peuvent décrire quoique ce soit (y compris des nombres) bien que, souvent, il s'agisse de nom de fichiers.

La commande if exécute certaines commandes pourvu qu'une condition soit remplie (-gt vaut pour greater than; -lt pour lesser than). La commande exécute toutes les lignes entre if et fi (c'est-à-dire ``if'' épelé à l'envers).

X=10

Y=5

if test "$X" -gt "$Y"; then

      echo "$X est plus grand que $Y"

fi 



La commande if peut être utilisée pleinement comme dans:

X=10

Y=5

if test "$X" -gt "$Y"; then

      echo "$X est plus grand que $Y"

elif test "$X" -lt "$Y"; then

      echo "$X est plus petit que $Y"

else

      echo "$X est égal à $Y"

fi 



A présent, créons un script qui interprète ses arguments.

Appelons-le backup-lots.sh:

#!/bin/sh 

for i in 0 1 2 3 4 5 6 7 8 9; do

      cp $1 $1.BAK-$i

done 



Ne l'exécutez pas immédiatement après en avoir modifié les droits (chmod 0755 backup-lots.sh). Créez d'abord un fichier vide data avec la commande touch (c'est-à-dire touch data). Maintenant, l'exécution de ./ backup-lots.sh data revient à copier le fichier data 10 fois avec 10 extensions différentes. Vous constatez que la variable $1 a une signification particulière: elle désigne le premier argument mentionné derrière la commande. Réalisons un script plus astucieux grâce auquel nous allons tester l'existence d'un argument et également, l'existence de fichiers de sauvegarde (utilisation de la forme test -e):

#!/bin/sh 

if test "$1" = ""; then

      echo "Usage: backup-lots.sh <filename>"

      exit

fi

for i in 0 1 2 3 4 5 6 7 8 9; do

"      NEW_FILE=$1.BAK-$i

      if test -e $NEW_FILE; then 
              echo "backup-losts.sh **warning** $NEW_FILE"

              echo "                already exists - skipping"

      else 
              cp $1 $NEW_FILE 
      fi

done 



next up previous contents Next: Arrêt de boucles et Up: Les scripts du shell. Previous: Boucles: instructions while et   Table des matières  
1-01-2006