Software">
[Go to site: main page, start]

0% ont trouvé ce document utile (0 vote)
3 vues42 pages

Programmation Shell

Le document traite des variables dans le shell, y compris leur définition, affectation, utilisation, destruction, et protection. Il explique également les alias, l'exportation de variables, et les variables d'environnement usuelles, ainsi que la structure et l'exécution des scripts shell. Enfin, il aborde la substitution de commandes et les étapes d'interprétation d'une ligne de commande.

Transféré par

Fatima Zahra Amaarouch
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues42 pages

Programmation Shell

Le document traite des variables dans le shell, y compris leur définition, affectation, utilisation, destruction, et protection. Il explique également les alias, l'exportation de variables, et les variables d'environnement usuelles, ainsi que la structure et l'exécution des scripts shell. Enfin, il aborde la substitution de commandes et les étapes d'interprétation d'une ligne de commande.

Transféré par

Fatima Zahra Amaarouch
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

La programmation Shell

I. Variables du shell
1. Notion de variable
Une variable est une donnée identifiée par un nom. Le nom d’une
variable est une suite de caractères alphanumériques.

Attention: Pour les noms de variables , le shell fait la différence


entre les MAJUSCULES et les minuscules.

Remarque1: il n’y a pas de notion de typage en shell, toutes les


valeurs affectées aux variables sont des chaînes de caractères,
et par conséquent:
– il n’y a pas de déclaration de variables.
– il n’y a pas de valeur numérique.
Remarque2: Sous UNIX, on distingue deux types de
variables:
les variables locales (les variables définies par
l’utilisateur), et les variables d’environnement (variables
globales ou exportées).
– Une variable locale est spécifique au processus shell en
cours (le shell dans lequel la variable est définie), seul ce
processus pourra l'exploiter et elle ne sera pas disponible
pour tous les processus fils créés.
– Les variables d’environnements sont transmises aux
sous-shells c’est-à-dire aux processus lancés par le shell
(les processus fils du shell).
2. Affectation des valeurs aux variables
Pour affecter une valeur (une chaine de caractères) à une variable on
utilise le symbole « = »
Syntaxe:
var=val
Affecte la valeur « val » à la variable « var »

Attention:
- Il n’y a pas d’espaces avant et après le symbole « = ».
- Si « val » contient des espaces ou des caractères spéciaux il faut la
mettre en double quotes
Exemple:
% mois=janvier
%
Affecte la chaine "janvier" à la variable « mois »
3. Utilisation des variables
Pour accéder à la valeur (au contenu) d’une variable, on la précède par le
symbole « $ ».
 le symbole « $ » sert à substituer (remplacer) la variable par sa valeur.
Syntaxe:
$nom_variable
Attention: pas d’espaces entre le symbole « $ » et la variable.

Exemple:
% echo $mois
janvier
%
N.B. La commande « echo » permet d’afficher ses arguments sur la sortie
standard (écran).
Il est parfois nécessaire de mettre la variable entre les accolades:
${nom_variable}

Exemple:
%vol=volume
%echo $vol60

%
N’affiche rien, en effet, pour le shell, « vol60 » est une variable non
initialisée (ne contient aucune valeur).

Si on veut afficher «volume60», on doit rajouter les accolades.


% echo ${vol}60
volume60
%
4. Destruction d’une variable
La commande « unset » permet de détruire (supprimer) une
variable (la variable ne sera plus accessible)
Syntaxe:
unset nom_variable

Exemple:
% unset mois
% echo $mois

%
N’affiche rien
5. Commande « readonly » : protection d’une variable
Pour protéger la modification du contenu d’une variable on utilise la
commande « readonly ».
Syntaxe:
readonly nom_variable

Exemple:
% readonly mois
% mois=Mars
bash: mois : variable en lecture seule
%
Remarque: Une variable protégée en écriture (une variable en lecture
seule) même vide, on ne peut plus ni la rendre modifiable ni la
détruire sauf si on quitte le shell.
6. Variables alias
- La commande « alias »
Un alias est une variable qui sert à:
– redéfinir le nom d’une commande
– ou à lui donner un nouveau nom.
Ceci permet de donner des noms simples (abrégés) à des
commandes.
Syntaxe:
alias nom=commande
Exemples:
- Donner un nouveau nom à la commande « ls -l » en lui donnant
un nom simplifié (nom abrégé)
% alias ll="ls -l"
% ll
-rwxr--r-- 1 etudiant etudiant 66 2014-11-23 17:29 ProgDebut

- Redéfinir le nom de la commande « ls» afin qu’elle désigne la


commande «ls -a».
% alias ls="ls –a"
% ls
. .. ProdDebut
La commande « alias » sans arguments, affiche la liste des alias
définis dans le même shell par l’utilisateur.

Exemple:
Afficher la liste des alias
% alias
ll="ls -l"
ls="ls –a"
%
- La commande « unalias »
Pour rendre une variable alias inaccessible (détruire la variable
alias), on utilise la commande « unalias ».

Exemple:
- Détruire la variable alias « ll »
% unalias ll
%ll
ll : commande not found
7. Exportation de variables : commande « export »
Les variables définies par l’utilisateur, sont des variables locales.
Elles ne sont connues que par les processus shell qui les ont créés.
 Elles ne sont pas transmises aux processus fils.

Remarque 1: Pour les tests, on utilise la commande « bash » qui


permet de créer un sous-shell (processus fils du shell). Pour
quitter le sous-shell, on exécute la commande « exit »

Remarque 2: Pour lister l’état des processus, on utilise la


commande « ps ».
Exemple 1: On teste de la commande « bash »
% ps -f
UID PID PPID C STIME TTY TIME CMD
etudiant 2128 1956 0 16:08 pts/1 00:00:00 bash
etudiant 2550 2128 0 16:32 pts/0 00:00:00 ps -f
%bash
% ps –f
UID PID PPID C STIME TTY TIME CMD
etudiant 2128 1956 0 16:08 pts/1 00:00:00 bash
etudiant 2600 2128 0 16:35 pts/1 00:00:00 bash
etudiant 2620 2600 0 16:36 pts/1 00:00:00 ps -f
%exit
Exemple 2: variable locale
- Considérons la série de commandes suivantes:
% a=35; echo $a
35
%bash
%echo $a

%
N’affiche rien
Explication:
• Les commandes « a=35 » et « echo $a » sont exécutées
dans le shell courant.
• La commande « bash » permet de créer un sous-shell.
• La dernière commande « echo $a » est exécutée dans le
sous-shell (le processus fils du shell créé par la commande
« bash »).
- puisque la variable « a », définie dans le shell père, n’est
pas transmise au sous-shell ( «a» est une variable locale).
- et puisque la variable « a » n’est pas définie dans le sous-
shell.
Alors la dernière commande n’affiche rien.
Pour que la variable locale soit globale entre le processus père et
ses processus fils, il faut l’exporter vers l’environnement, par
conséquent la variable locale devienne une variable
d’environnement (variable globale). Pour exporter une variable on
utilise la commande « export ».

Syntaxe:
export nom_variable
export nom_variable =valeur

Permet de déplacer la variable « nom_variable », définie dans la


zone des variables locales du processus shell, vers la zone
d’environnement (la zone des variables globales).
Exemple 3:
% a=35
% export a
%bash
%echo $a
35
%
Explication:
- Les commandes « a=35 » et « export a » sont exécutées dans le shell
courant.
- La commande « bash » permet de créer un sous-shell.
- La dernière commande « echo $a » est exécutée dans le sous-shell.
Puisque la variable « a » est exportée, donc elle est accessible par le
sous shell.
Attention: exportation du père vers les fils et non des fils vers le
père.
Exemple 4:
%(B=20; export B)
%echo $B
%
N’affiche rien.
En effet:
- Les commandes (B=20; export B) sont exécutées dans un sous-
shell, par conséquent, la commande « export B » est exécutée
dans le sous-shell.
- La commande « echo $B » est exécutée dans le shell courant (le
processus père).
8. Les variables d’environnements usuelles.
• L’environnement du shell est initialisé par le fichier
« /etc/profile »,
• Seul l’administrateur système qui a le droit de modifier ce
fichier.
• A chaque lancement d’un processus shell, des variables
prédéfinies sont initialisées. Elles servent à configurer
l’utilisation du Shell et les outils Unix: ce sont les variables
d’environnement usuelles (prédéfinies).
Quelques variables d’environnement usuelles
HOME : référence le répertoire du login .
PATH: référence le chemin de recherche pour l'exécution des commandes
CDPATH: référence le chemin de recherche pour la commande cd
PS1: référence l’invite de commande ( le prompt).
LANG : référence la langue utilisée pour les messages.
SHELL : référence le shell de l’utilisateur
HISTSIZE : Nombre de commandes à mémoriser dans l’historique .
USER : référence le login utilisateur
PWD : référence le répertoire courant
SECONDS: le nombre de secondes écoulés depuis le lancement du script.
RANDOM: génère un nombre aléatoire entre 0 et 32767 à chaque appel.
La commande « env » permet d’afficher les variables
d’environnement (y compris celles définies par l’utilisateur) .
% env
USER=FATIZ
HOME=/users/FATIZ
PWD=/home/FATIZ
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin/:/usr/bin:/sbin:/bin
: /usr/games
SHELL=/bin/bash
LANG=fr_FR.UTF-8

%
9. Modification des variables d’environnement usuelles:
Comme exemple, on travaillera avec la variable d’environnement
« PATH ». Cette variable référence la liste des répertoires que le
shell explore pour chercher la commande à exécuter.

Par exemple:
si « PATH » contient les chemins:
/bin:/usr/bin:/usr/local/bin:
alors pour exécuter la commande « cat », le shell va la
chercher dans ces répertoires:
/bin/cat, /usr/bin/cat, /usr/local/bin/cat:
Exemple : Soit l’exécutable « test» d’un programme écrit en
langage « C ». Supposons qu’il se trouve dans le répertoire
courant.
Pour exécuter ce programme, on tape la commande
%./test

Si le « PATH » contient le répertoire courant (le répertoire "."),


alors pour exécuter une commande, le shell cherche aussi dans
le répertoire courant. Dans ce cas, pour exécuter le programme
« test », il suffit de taper:
%test
Au lieu de
%./test
• Pour modifier une variable d'environnement de façon
permanente (prise en compte par tous les processus shell
lancés), on peut ajouter une ligne dans le fichier d'initialisation
du shell (~/.bashrc pour Bash)

Dans le fichier « ~/.bashrc »


#~/.bashrc : excutable bay bash(1) for non-login shells
….
# on rajoute la ligne suivante
PATH=$PATH:.

Pour mettre à jour l’environnement (c’est-à-dire la modification


soit pris en compte) en tape
% . ./.bashrc
II. Les étapes de l'interprétation d'une ligne de commandes
1. Introduction
Le shell lit, dans l’ordre suivant, la ligne de commande avant d'exécuter la
commande.
• Substitution de variables : le shell remplace les variables par leurs
valeurs.
• Substitution de commandes : le shell remplace une variable par son
contenu qui est le résultat d'une commande.
• Interprétation des pipes et des redirections.
• Interprétation des caractères spéciaux pour la génération des noms des
fichiers.
• Exécution de la commande.

Les arguments d’une commande peuvent contenir des caractères spéciaux


qui seront interprétés par le shell avant d'être interprétés par la commande.
Dans ce cas on doit indiquer au shell d’interpréter ou non ces caractères
spéciaux.
5. La substitution de commandes
La substitution de commandes consiste à remplacer le nom
d'une commande par son résultat. Il en existe deux formes :
`commande` ou $(commande).
- La forme avec les caractères back-quotes « ` »
• Les caractères back-quotes « `` » (les accents graves,
s'insèrent avec Alt Gr + 7 sur un clavier AZERTY français).
- Permettent de substituer le résultat d’une commande écrite
entre des back-quotes, dans une chaine de caractères.
Exemple1:
% echo la date est `date`
La date est mardi 25 novembre 2014, 11:59:10
- Permettent d’assigner (affecter) la sortie d’une commande à une
variable ou d’utiliser la sortie d’une commande comme un
argument d’une autre commande.
Exemple 2:
% x=`ls`
% echo $x
ProgDebut res
% rep=`pwd`
% echo $rep
/home/etudiant/cours
%cd /
%cd $rep ; pwd
/home/etudiant/cours
- La forme $(commande)
- Permet de substituer le résultat d’une commande dans une chaine de
caractères.
Exemple3:
% echo la date est $(date)
La date est mardi 25 novembre 2014, 11:59:10
- Permet d’assigner la sortie d’une commande à une variable ou d’utiliser
la sortie d’une commande comme un argument d’une autre commande.
Exemple 4:
% x=$(ls)
% echo $x
ProgDebut res
% rep=(pwd) ; echo $rep
/home/etudiant/cours
%cd /
%cd $rep ; pwd
/home/etudiant/cours
III. Script shell
1. Introduction
Un script shell (ou un shell-script ou tout simplement un
script) est un fichier qui contient un ensemble de
commandes UNIX. A l'exécution, le fichier est interprété:
les commandes sont exécutées automatiquement.
 le script shell
– est un programme qui utilise des commandes Unix.
– c’est un langage de programmation interprété.
– il permet l’automatisation des actions. Il est très utile
pour automatiser des tâches répétitives.
2. Structure d’un script shell
La structure générale d’un script shell est la suivante:
#! Shell_utilisateur
code
• Sur la première ligne on donne le chemin absolu du shell
utilisé.
Exemple:
#! /bin/bash
• Ensuite on écrit le code.
Remarques 1:
- Une ligne commentaire est une ligne précédée par le caractère
« # ». Les lignes de commentaire ne sont pas interprétées.
- La commande « exit » est utilisée pour terminer un script.
- A la fin du code, on peut insérer l’instruction « exit num ».
L’entier « num » est utilisé comme code retour (code de sortie)
du script. L’entier « num » est un nombre entre 0 et 255.
- Lorsqu'un script ne se termine pas avec « exit num» ou se
termine avec « exit » sans paramètre, alors le code retour du
script est le code retour de la dernière commande exécutée
dans le script (avant exit).
Remarques 2:
• On a déjà vu qu’une séquence de commandes peut s’écrire en
séparant les commandes avec « ; »
commande1 ; commande 2 ;...
• Lorsque différentes commandes sont écrites sur des lignes
différentes, alors elles sont exécutées une après l’autre.
commande1
commande2
….

commande1 ; commande 2 ;...
Exemple:
Ecrire un script shell qui affiche un message, ensuite
liste les fichiers, avec leurs numéros d’inodes, du
répertoire de connexion et enfin affiche la liste des
processus.
# !/bin/bash
# le code:
echo "Bonjour !"
cd
ls -i
ps
exit 0
3. Exécution d’un script shell
• Pour exécuter un script shell, l’utilisateur doit avoir le droit
d’accès en exécution à ce sript.
 il doit avoir la permission « x ».
• Pour exécuter un script shell, on tape le nom du script en
précisant son emplacement (on donne le chemin relatif ou
absolu au script).
• Si le path (la variable « PATH ») contient le chemin du
répertoire qui contient le script, alors pour l’exécuter, il suffit
de taper le nom du ficher comme une commande.
Créer un script de bienvenue
[Link]éez un script [Link] en respectant les directives suivantes
2. Déclarer les variables : nom, prénom, niveau, filière et
école.
3. Afficher ces infos dans une phrase.
[Link]ée un fichier texte avec le nom de l’utilisateur.
4. Variables pour le passage d'arguments
1. Introduction
A un script shell, on peut lui passer des arguments sur la ligne de
commande. Ces arguments (appelés aussi des paramètres
positionnels) peuvent être exploités dans le programme lui-même
comme des variables. D’autre paramètres spéciaux, sont
prédéfinis et qui sont exploitables dans le script shell.

2. Les paramètres positionnels


Pour référencer les paramètres positionnels (les arguments passés
sur la ligne de commande au script shell), on utilise les variables
réservées 1,2,3,...9,10,11,... Ces variables peuvent être utilisées à
l'aide des expressions $1,$2... (ou ${1},${2}... ) où « $n »
désigne le nième argument (exemple: $3 est le 3ième argument).
Attention: Dans certains cas, les accolades « {} » sont
nécessaires:
Exemple1: considérons le script suivant dont le nom est «
test »:
# !/bin/bash
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12
exit 0
Exécution
% ./test un deux trois quatre cinq six sept huit neuf dix onze douze
un deux trois quatre cinq six sept huit neuf un0 un1 un2
%
4.3. Les paramètres spéciaux
Ce sont en fait des variables réservées. Certaines de ces variables
sont liées aux arguments passés au script shell. Pour les utiliser, on
les fait précéder par le caractère spéciale « $ ». Ces paramètres sont :

• La variable réservé « 0 »: $0 désigne le nom du script shell.

• Le paramètre « * » : $* revoie la liste de tous les arguments


mais sous la forme d'un seul argument.

• Le paramètre « @ »: $@ renvoie la liste de tous les arguments


mais sous forme de plusieurs arguments séparés par des
espaces.

• Le paramètre « # » : $# renvoie le nombre d’arguments passés au


script.
• Le paramètre « ? »: $? revoie le code retour de la dernière
commande.

• Le paramètre « $ »: $$ renvoie le PID du processus qui


exécute le script (le PID du sous-shell lancé par le shell en
cours pour exécuter le script).

• Le paramètre « ! » : $! renvoi le PID du processus lancé


pour exécuter la dernière commande lancée en arrière plan.
Exemple: Considérons le script suivants
# !/bin/bash
echo "Bonjour !"
echo " Le nom du script est : $0 "
echo " Le nombre d’arguments est : $# "
ls -i
ps
echo " Le PID du processus qui exécute le script est : $$ "
echo " L’ensemble d’arguments est : $* "
echo " La liste de tous les arguments est : $@ "
echo " Le premier argument est : $1 "
echo " Le troisième argument est : $3 "
exit 0
Exécution du script
% ./prog_debut un deux "trois quatre" cinq six
Bonjour !
Le nom du script est : ./prog_debut
Le nombre d’arguments est : 5
1182676 prog_debut 1182230 tache1.c
PID TTY TIME CMD
1702 pts/0 00:00:00 bash
3348 pts/0 00:00:00 prog_debut
3350 pts/0 00:00:00 ps
Le PID du processus qui exécute le script est : 3348
L’ensemble d’arguments est : un deux trois quatre cinq six
La liste de tous les arguments est : un deux trois quatre cinq six
Le premier argument est : un
Le troisième argument est : trois quatre
%

Vous aimerez peut-être aussi