Shell script:Instructions conditionnelles et boucles

De WIKI.minetti.org
Aller à : navigation, rechercher

L'instruction conditionnelle IF

L'instruction conditionnelle IF a la forme suivante:

if [ test A ]; then
    ...
    Instruction
    ...
elif [ test B ]; then
    ...
    Instruction
    ...
else
    ...
    Instruction
    ...
fi

Il faut faire attention de laisser des espaces entre les crochets encadrant l'expression conditionnelle.

Boucle pour lister le contenu d'un répertoire

Pour traiter le contenu d'un répertoire:

for FILE in "$PATH_TO_TREAT/*" ; do
    if [ "$FILE" != "$PATH_TO_TREAT/*" ]; then
        ...
        Instruction
        ...
    fi
done

Pour la prise en compte des fichiers cachés:

for FILE in "$PATH_TO_TREAT/.*" ; do
    if [ "$FILE" != "$PATH_TO_TREAT/." ] && [ "$FILE" != "$PATH_TO_TREAT/.." ]; then
        ...
        Instruction
        ...
    fi
done

Boucle pour parser un fichier

Tableau

Pour extraire les données d'un fichier sous forme de tableau:

while IFS=: read user pass uid gid full home shell; do
    echo -e "$full :\n\
       Pseudo : $user\n\
       UID :\t $uid\n\
       GID :\t $gid\n\
       Home :\t $home\n\
       Shell :\t $shell\n\n"
done < /etc/passwd

IFS indique le caractère de séparation. Par défaut c'est le caractère espace qui est pris.

Autre exemple avec un caractère tabulation comme séparateur:

TAB=$( printf "\t" )
while IFS=$TAB read user pass uid gid full home shell; do
    echo -e "$full :\n\
       Pseudo : $user\n\
       UID :\t $uid\n\
       GID :\t $gid\n\
       Home :\t $home\n\
       Shell :\t $shell\n\n"
done < /var/minetti/passwd

Liens externes

commentcamarche.net: Comment lire un fichier ligne par ligne