Você está na página 1de 6

jj/04/OO

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

/bin/bash prcis dans /etc/passwd


interprtation des fichiers :
1. /etc/profile communs tous les utilisateurs y compris root
On y trouve notamment la dfinition du prompt
2. le fichier $HOME/.bash_profile, s'il existe (sinon le fichier $HOME/.bash_login)
3. /etc/bashrc dfinition des alias globaux
4. $HOME/.bashrc, s'il existe

b) Edition des commandes

<ctrl> e : place le curseur en fin de ligne


<ctrl> a : place le curseur en dbut de ligne
<ctrl> u : efface les caractres du dbut de ligne jusqu'au curseur
<ctrl> s : arrt du dfilement l'cran
<ctrl> q : reprise du dfilement l'cran
<TAB> : compltion : si premier mot, complte avec les commandes possibles, pour les autres mots complte
avec un nom de fichier du rpertoire courant
!! : rappelle la dernire commande
!xxx : rappelle la dernire commande commenant par xxx.
history : affiche la liste des dernires commandes tapes avec leur numro
!n : rappelle la commande numro n
~ : pour se rendre chez un utilisateur ~nom_utilisateur ou chez soi ~/
certains caractres sont spciaux (" ' ; < > [ $ - etc.), \ pour les dspcialiser.

c) Variables

env : affiche la liste des variables d'environnement


HOME : rpertoire personnel
USER : nom de l'utilisateur
PATH : listes des rpertoires dans lesquels le shell cherche les commandes
PS1 : prompt
PWD : rep. courant
$var : valeur de la variable
affichage d'une variable : echo $HOME
affectation :
PATH=$PATH:./bin
PS1="salut>"
PS1="[\t \d \u@\h \w \$]" // affiche [heure date username@machine rp. $]

possible d'ajouter ses propres variables


machaine="salut la foule"

1
jj/04/OO
echo $machaine
set : liste de toutes les variables (environnement + utilisateur)

d) Compltion des noms de fichiers

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`"

f) Commandes internes et externes

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 :

a) Redirection dans un fichier

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

b) Redirection vers une commande

oprateur pipe (caractre |) signifiant tuyau.


cmd1 | cmd2 | | cmdn
redirige la sortie de cmd(n-1) dans l'entre de cmdn

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.)

Soit R et S deux expressions rgulires :

expression rgulire signification


x le caractre x
. n'importe quel caractre sauf \n
[xyz] soit x, soit y, soit z
[^bz] tous les caractres sauf b et z
[a-z] n'importe quel caractre entre a et z
[^a-z] tous les caractres sauf ceux compris entre a et z
R* zro R ou plus
R+ au moins une fois R
R? zro ou une fois R
R{2, 5} entre 2 et 5 fois R
R{2,} au moins deux fois R
R{2} exactement deux fois R
RS concatnation d'expr. rgulires R suivi de S
R|S R ou S
^R R en dbut de ligne
R$ R en fin de ligne

4) Shell script bash

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

le caractre # indique un commentaire, celui-ci s'tend jusqu' la fin de la ligne.


un script commence toujours par la ligne #!/bin/bash
Cela prcise que la suite sera excut par un shell bash (qui rcupre l'environnement du shell de lancement).
un fichier contenant un script doit tre explicitement rendu excutable (chmod u+x nomfichier)
on excute un script comme un fichier excutable, en tapant sur la ligne de commande le nom du fichier
contenant le script
entre/sortie : echo et read
variables spciales :

C'est la valeur de sortie de la dernire commande.


$?
Elle vaut 0 si la commande s'est droule sans pb.
$0 Cette variable contient le nom du fichier script
$1 $9 Les (ventuels) premiers arguments passs l'appel du script
$# Le nombre d'arguments passs au script
$* La liste des arguments partir de $1
3
jj/04/OO
$$ le n PID du processus courant
$! le n PID du processus fils

Il n'y a que 9 paramtres de position de $1 $9, et s'il y a davantage de paramtres transmis, on


peut les rcuprer par la commandes shift qui effectue un dcalage de pas +1 dans les variables $ :
$1 prend la valeur de $2, etc...

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 quant au fichier


-e il existe
-f c'est un fichier normal
-d c'est un rpertoire
il est lisible | modifiable |
-r | -w | -x
excutable
-s il n'est pas vide

tester une chaine

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

oprations dans une commande test

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
.....

Conditionnelles imbriques choix multiples


Pour imbriquer plusieurs conditions, on utilise la case valeur in
construction : expr1) commandes ;;
if commande1 expr2) commandes ;;
then ...
bloc-instruction1 esac
elif commande2
then
bloc-instruction2
else
# si toutes les conditions prcdentes sont fausses
bloc-instruction3
fi

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.

Boucle while - until

while commande
do
commandes
done

until 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.

Sortie et reprise de boucle

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

nom-fct() { variables locales


bloc d'instructions Dans le corps de la fonction, on peut dfinir et
} utiliser des variables dclares locales, en les
introduisant avec le le mot-cl local
passage d'arguments
Le mcanisme est le mme que vis vis d'un script

f) Commandes supplmentaires

$((expresion arithmtique)) valuation d'une expression arithmtique


set
Exemple d'utilisation pour "clater" une ligne en mots, affects aux variables de position
# soit une chaine ch qui contient une liste de valeurs
c="prof eleve classe note"
# set -- va lire chaque mot de la liste et l'affecter aux paramtres de position
set -- $c
echo $1 $2 $3 $4
shift
echo $1 $2 $3 $4
eval considre la chane en paramtre comme une suite de commandes et les excutent (les commandes
doivent spars par ; )
expr calculs numriques

Você também pode gostar