Structures de contrôles en bash

Transcription

Structures de contrôles en bash
Structures de contrôles en bash Les mots‐clés sont en gras, liste désigne une liste de commandes. Boucles Conditions for nom [ in mots ] ; do liste ; done if liste; then liste; [elif liste; then liste;] * while liste; do liste; done [else liste;] fi case mot in [ motif[|motif]*) liste;;]* esac Exemples : if fichier=/home/alfred/devoir.html
if [ -f $fichier –a –r $fichier ]
then
echo "je vais vérifier ton devoir"
elif [ ! –e $fichier ]
then
echo "ton devoir n'existe pas "
else
echo "ton devoir n'est pas lisible"
fi
case read langue
case $langue in
francais) echo "Bonjour" ;;
anglais) echo "Hello" ;;
espagnol) echo "Buenos Dias" ;;
esac
case $param in
0|1|2|3|4|5|6|7|8|9 ) echo "$param est un chiffre" ;;
[0-9]*) echo "$param est un nombre" ;;
[a-zA-Z]*) echo "$param est un mot" ;;
*) echo "param non prévu" ;;
esac
for echo "Le script $0 a été appelé avec $# paramètres"
for I in $*
do
if test -e $I ; # si $I est un fichier
then
echo "$I est un fichier"
else
echo "$I n'est pas un fichier"
fi
done
while I=0
while [ $I –lt 10 ]; do I=$(($I+1)); done
Exemple illustrant les structures de contrôle (if, case, while, for)
#!/bin/bash
# Script comptant le nombre d'utilisateur appartenant au meme groupe qu'un
# utilisateur donné
# test des arguments
if [ $# -eq 0 ]
then echo "usage : $0 nom_utilisateur"
exit 1
elif [ $# -gt 2 ]
then
echo "arguments > 2 non pris en compte"
fi
# petit test intermédiaire sans importance
case $USER in
$1) echo "Test vous concernant";;
*) echo "Test sur un autre utilisateur";;
esac
# demande de validation sur la suite
OK=-1
while [ $OK -eq -1 ]
do
echo "Voulez-vous continuez ?"
read response
case $response in
[yYoO]*) OK=1;;
[nN]*) OK=0;;
esac
done
# ; si l'instruction continue sur la ligne (d'où les 2 ';')
if [ $OK -eq 0 ]; then exit 2; fi
# pour récupérer exactement le nom de l'utilisateur
# NOM_UT=`cut -d: -f1 | grep -n "^$1$"` -> 21:mathis
# exemple de ligne : mathis:x:501:501:mathis pascal:/home/mathis:/bin/bash
NUM_LIGNE=`cut -d: -f1 /etc/passwd | grep -n "^$1$" | cut -d: -f1`
if [ -z $NUM_LIGNE ]
then
echo "information non trouvée"
exit 3
fi
LIGNE=`head -$NUM_LIGNE /etc/passwd | tail -1`
# récupération du numéro de groupe
NUM_GROUPE=`echo $LIGNE | cut -d: -f3`
I=0
for VAL in `cut -d: -f3 /etc/passwd`
do
if [ $VAL -eq $NUM_GROUPE ]
then I=`expr $I + 1` # ou I=$(($I+1))
fi
done
# autre possibilité : VAL=`cut -d: -f3 /etc/passwd | grep $NUM_GROUPE | wc -l`
echo "Vous etes $I utilisateur(s) à appartenir au groupe de $1"

Documents pareils