Beruflich Dokumente
Kultur Dokumente
Bash et
shell scripts
Sous Unix, un interprteur de commande est appel un shell. Il en existe plusieurs et nous prsentons le shell
actuellement le plus utilis : le bash. Nous introduisons ensuite les shell scripts.
1) Le bash
a) Lancement
c) Variables
1
jj/04/OO
echo $machaine
set : liste de toutes les variables (environnement + utilisateur)
Caractre Interprtation
? un caractre quelconque
* une chane de caractre quelconque
(ventuellement vide)
[ dbut de dfinition d'un ensemble
[^ dbut de dfinition de complment d'un
ensemble
] fin de dfinition d'un ensemble
- marque d'intervalle dans un ensemble
e) Dlimiteur de chanes
' (simple quote) : tous les caractres l'intrieur d'une telle chane perdent leur aspect spcial (sauf ')
ex : echo 'j\'aime payer en $'
" (double quote) : les caractres $ \ ` et ' sont spciaux
ex : echo "mon nom est $USER"
` (anti quote ou backquote) : la chane est interprte comme une commande.
ex : echo "la date actuel est `date`"
Les commandes externes sont simplement des programmes excutables placs dans les rpertoires de la
variables PATH. Les commandes internes sont excutes par le shell, elles consistent gnralement en
l'affichage ou la modification de variables du shell.
Commandes internes courantes : cd, set, unset, env, alias, unalias, p (retour au rpertoire prcdent)
which est une commande qui affiche le chemin d'une commande externe. Ex : which ls
2) Redirections
Chaque processus est li 3 fichiers (entre, sortie, erreurs) et ceux-ci peuvent tre prcis sur la ligne
de commande :
rle exemple
< redirige l'entre standard cat < toto.txt
> redirige la sortie standard ls l > titi.txt
2> redirige la sortie erreur find . name "*.ps" print 2> /dev/null
2
jj/04/OO
3) Expressions rgulires
Certaines commandes permettant de filtrer des fichiers utilisent des expressions rgulires. Celles-ci
servent exprimer des motifs du type "toutes les lignes ayant une lettre en dbut de ligne et une lettre en
fin". Elles sont utilises dans les commandes grep, sed et dans certains diteurs de texte (vi, nedit, etc.)
Le terme script dsigne un fichier excutable par le shell. Il contient des commandes externes, des
commandes internes et des commentaires. Un script peut contenir des structures de contrle (if, while,
etc.). Quand on lance l'excution d'un script, le shell lit et excute squentiellement les lignes de ce fichier
qui joue, pour le shell qui l'excute, le rle de l'entre standard d'un shell interactif.
Un script est un fichier texte, il ne s'agit pas d'un binaire, il est interprt par le shell.
a) Gnralits
b) La commande test
elle sert vrifier des conditions sur des fichiers, des chaines ou des expressions numriques.
elle admet 2 syntaxes ( la seconde est la plus utilise) :
test option fichier
[ option fichier ]
valeur de retour :: 0 pour lui indiquer si elle s'est droule normalement ou un autre nombre si une erreur
s'est produite.
Cette valeur numrique est stocke dans la variable spciale $?
tester un fichier
Tableau des principales options
option signification
-z | -n la chaine est vide / n'est pas vide
les chaines compares sont identiques |
= | !=
diffrentes
tester un nombre
option signification
-eq | -ne gal | diffrent
-lt | -gt strict. inf | strict. sup
-le | -ge inf ou gal | sup ou gal
option valeur
[ expr1 -a
(and) 0 si les 2 expr sont vraies
expr2 ]
[ expr1 -o (or) 0 si l'une des 2 expr est
expr2 ] vraie
[ ! expr1 ] ngation
4
jj/04/OO
c) Structures conditionnelles
if suite-de-commandes
then
# squence excute si suite-de-commandes rend une valeur 0
bloc-instruction1
else
# squence excute sinon
bloc-instruction2
fi
Attention ! si then est plac sur la 1re ligne, sparer avec un ;
if commande; then
.....
d) Structures itratives
boucle for
for variable [in liste]
do
commandes (utilisant $variable)
done
Ce n'est pas une boucle for controle habituelle dans les langages de programmation classiques (utiliser pour
cela une boucle while).
La variable parcours un ensemble de fichiers donnes par une liste ou bien implicitement et le bloc
commandes est excut pour chaque de ses valeurs.
Les mots-cls do et done apparaissent en dbut de ligne ( ou aprs un ;)
La liste peut tre explicite :
for nom in jean toto stage1
do
echo "$nom, bientt"
done
La liste peut tre calcule partir d'une expression modle Pour recopier tous les fichiers perso. de toto
for fich in /home/toto/*
do
5
jj/04/OO
cp $fich $HOME/sauvetoto
done
Si aucune liste n'est prcise, les valeurs sont prises dans la variable systme $@, c'est--dire en
parcourant les arguments courants de la ligne de commande.
while commande
do
commandes
done
Ces structures sont apparemment classiques, la diffrence qu'ici aussi la condition de poursuite (while) ou
d'arrt (until) est une commande (ou une suite de commandes) considre comme vraie, si sa valeur de sortie
vaut 0, sinon la boucle se termine.
break plac dans le corps d'une boucle, provoque une sortie dfinitive cette boucle.
continue permet de sauter les instructions du corps de la boucle (qui suivent continue) et de "continuer"
l'itration suivante.
Pour les boucles for, while et until, continue provoque donc la rvaluation immdiate du test de la boucle.
e) Fonctions
f) Commandes supplmentaires