Cours "Système D'exploitation" 1ère Année: IUT de Caen Département D'informatique (François Bourdon)
Cours "Système D'exploitation" 1ère Année: IUT de Caen Département D'informatique (François Bourdon)
Cours "Système D'exploitation" 1ère Année: IUT de Caen Département D'informatique (François Bourdon)
d’exploitation"
1ère année
IUT de Caen
Département d’Informatique
(François Bourdon)
Chapitre 4
Les langages de commandes
−− SHELL −−
(partie 2)
4 Les langages de commandes (SHELL)
Plan
4.3 Procédures
4.5 Opérateurs
4.9 Fonctions
IV.4 Structures de contrôle
A. Introduction
$ for i in 3 2 1 BOUM
> do echo $i
> done
3
2
1
BOUM
$
Exemple
$ for i in 1 2 3
> do cp fich "$i" /tmp
> chmod 666 /tmp/fich "$i"
> done
$
Si la partie [in liste ...] est omise, elle est par défaut
constituée par la liste des arguments qui ont été passés à la
procédure.
for i for i in $*
do do
cmd est équivalent à cmd
done done
Exemple
$ cat listarg
for arg
do echo argument: $arg
done
$ chmod a+rx listarg
$ listarg camion proton vélo
argument: camion
argument: proton
argument: vélo
$ listarg f* $HOME
argument: fic1
argument: fic2
argument: /usr/c1
$
Une structure de contrôle est interprétée
comme une commande, par conséquent il est
toujours possible d’imbriquer des boucles dans
des boucles.
Exemple
$ for consonne in b c d f g
> do
> for voyelle in a e i o u
> do echo "$consonne$voyelle\c"
> done
> echo " "
> done
babebibobu
cacecicocu
dadedidodu
fafefifofu
gagegigogu
$
Exemple
$ VAR="3 2 1 BOUM"
$ for i in $VAR
> do
> echo $i
> done
3
2
1
BOUM
$
Il est possible d’initialiser la liste à l’aide du
résultat d’une commande en mettant la
commande entre ‘‘.
Exemple
if commandes1
then commandes2
else commandes3
fi
$ cat existuser
if grep "$1" /etc/passwd > /dev/null
then echo "L’utilisateur $1 a un compte"
else echo "L’utilisateur $1 n’existe pas"
fi
$ chmod u+x existuser
$ existuser c1
L’utilisateur c1 a un compte
$
Il est possible d’enchaîner en cascade des
conditionnelles de ce type :
if commandes1
then commandes2
else if commandes3
then commande4
else if commande5
......
fi
fi
fi
if commandes1
then commandes2
elif commandes3
then commandes4
elif commandes5
.....
fi
Signalons l’existence d’abréviations :
est équivalent à
et
commande1 || commande2
case chaîne in
motif1) commande1 ;;
motif2) commande2 ;;
...
motifn) commanden ;;
esac
$ cat choix
echo voulez vous continuer \c
read reponse
case "$reponse" in
[nN] | no | NO) exit 0;;
esac
# suite du traitement
date
$
E. Les structures while et until
et
until commandes1
do commandes2
done
Exemple :
$ cat userloger
until who | grep "$1" > /dev/null
do
echo −e ",\c"
sleep 300
done
echo "\n$1 est arrivé"
$ chmod u+x userloger
$ userloger c1
,,,
c1 est arrivé
$
Exemple :
$ cat diffold
for fic in *
do
diff old/$fic $fic
done > fich.diff
$