Vous êtes sur la page 1sur 133

Programmation Shell

Lignes de commandes et programmation Shell

Thierry Hamon

Bureau H202
Institut Galilée - Université Paris 13
&
LISN - Université Paris-Saclay
hamon@limsi.fr
https://perso.limsi.fr/hamon/Teaching/P13/ProgShell-2021-2022/

INFOA1 – Prog Shell

1/133
Plan
1 Présentation d’UNIX

2 Utilisation d’UNIX

3 Commandes Unix

4 Jobs UNIX

5 Interpréteurs de commande

6 Shells

7 Structures de contrôle

8 Tableaux

9 Conclusion

2/133
Présentation d’UNIX

Présentation globale d’UNIX (1)

UNIX :
Standard pour les systèmes d’exploitation
Disponibilité de nombreux utilitaires de manipulation de
données textuelles
Facilité de communication de données entre différents
programmes

Des types d’UNIX : Linux, Solaris, Android, macOS

Dans le cadre du cours, utilisation d’un UNIX : Linux

3/133
Présentation d’UNIX

Présentation globale d’UNIX (2)

Quelques caractéristiques importants des systèmes UNIX :


Multi-utilisateurs et multi-tâches
Temps partagé
Système de fichiers hiérarchique
Entrées-Sorties intégrées au système de fichiers
Interface utilisateur interactive (shell ou interpréteur de
commandes)

4/133
Présentation d’UNIX - Fichiers

Organisation du système de fichiers sous UNIX

Système de fichiers :
Structure logique permettant la gestion de l’espace disque
Chaque disque logique (partition) possède un système de
fichiers

/usr

/ /home

Organisation des systèmes de fichiers dans une arborescence


Hiérarchisation des systèmes de fichiers

5/133
Présentation d’UNIX - Fichiers

Structure arborescente d’UNIX (1)

Rattachement des systèmes de fichiers secondaires au système de


fichiers principal
/

/home /usr /lib /cdrom /media/usb /Dwindows

/home/infoa1 /home/thierry /usr/bin /usr/sbin

6/133
Présentation d’UNIX - Fichiers

Structure arborescente d’UNIX (2)

Accès aux disques (CDROM, clé USB, etc.) comme à un répertoire

/home /usr /lib /cdrom /media/usb /Dwindows

/home/infoa1 /home/thierry /usr/bin /usr/sbin

7/133
Présentation d’UNIX - Fichiers

Les fichiers (1)

Représentation de toutes les ressources disponibles (fichiers


classiques, dispositifs diverses, périphériques)
Plusieurs types de fichiers :
Les fichiers réguliers ou ordinaires
Les fichiers répertoires
Les fichiers spéciaux (clavier, écran, etc.)
Les tubes nommés (points de communication)
Les liens symboliques (identification de données avec plusieurs
noms)

8/133
Présentation d’UNIX - Fichiers

Les fichiers (2)

Nom des fichiers : jusqu’à 255 caractères alphanumériques


Sous UNIX : différenciation des lettres en majuscule et en
minuscule
Exemple : air et AIR sont deux chaı̂nes de caractères différentes
Fichiers cachés : nom commençant par un point (.bashrc, ..)
Deux fichiers particuliers :
. : le répertoire courant
.. : le répertoire père

9/133
Présentation d’UNIX - Fichiers

Les fichiers ordinaires

Pour le système, pas de distinction au niveau du contenu


Mais pour les commandes, distinction importante :
Les fichiers binaires
Les fichiers textes : structurés en ligne
Ligne :
suite de caractères se terminant par un caractère
<fin de ligne>, non visible à l’écran
unité élémentaire pour la plupart des commandes

10/133
Présentation d’UNIX - Fichiers

Informations sur les fichiers (1)

Chaque fichier :
appartient à un utilisateur (user) et un groupe (group)
possède des droits décrivant leurs modes d’utilisation et
d’accès :
lisible
modifiable
exécutable (pouvant être ouvert, dans le cas d’un répertoire)

11/133
Présentation d’UNIX - Fichiers

Informations sur les fichiers (2)

Répartition des droits sur trois niveaux correspondant à trois


classes d’utilisateurs :
Le propriétaire du fichier (user )
Le groupe auquel appartient le propriétaire (fixé par
l’administrateur du système) (group)
Les autre utilisateurs (other )
Un utilisateur à part possédant tous les droits : le super utilisateur
(root)

12/133
Présentation d’UNIX - Fichiers

Informations sur les fichiers (3)

En résumé, chaque fichier possède des droits en


lecture (r)
écriture (w)
exécution (x)
pour
l’utilisateur user
le groupe group
les autres other

13/133
Présentation d’UNIX - Fichiers

Visualisation des informations sur un fichier

À l’aide de la commande ls et de l’option -l (ligne de commande


ls -l :

−rw−r−−r−− 1 hamon users 902 Nov 25 13:33 fichier1

Utilisateur Groupe
Type de Droit du
fichier groupe
Droits de Droit des
l’utilisateur autres

14/133
Présentation d’UNIX - Processus

Les processus

Rappel : Programme en exécution dans un système UNIX


Toute activité correspond à un processus
Tout processus correspond à un fichier ou un ensemble de
fichiers (dans le répertoire /proc sous Linux)
Création avec fork ou exec dans un programme C
Par défaut, trois fichiers standards associés à un processus :
Entrée standard (clavier - descripteur 0)
Sortie standard (écran - descripteur 1)
Sortie des erreurs (écran - descripteur 2)

15/133
Présentation d’UNIX - Processus

Description d’un processus

PID : l’identifiant du processus


PPID : l’identifiant du père du processus
UID : identifiant de l’utilisateur propriétaire
priorité : valeur entre -20 (priorité élevée) et +20 (priorité
faible)
terminal de contrôle (tty)
répertoire courant
mémoire utilisée (vive et swap)
temps d’exécution (réel, et au niveau de l’utilisation
processeur)

16/133
Présentation d’UNIX - Processus

Organisation

2 types de processus :
processus système : Processus lié au fonctionnement du
système (init, udevd, rpcbind, etc.)
processus utilisateur : exécution d’une commande, d’un
programme ou d’une application (apache, ls, ...)
Organisation des processus selon un arbre hiérachique
La racine : processus init (PID = 1)
Chaque nœud : un processus
Un processus créé est lié à son père (PPID) tant que celui-ci
existe, sinon il est lié au processus de PID 1

17/133
Présentation d’UNIX - Processus

Etats d’un processus

18/133
Présentation d’UNIX - Processus

Etats d’un processus

IDLE : Le processus en cours de création


RUN : Le processus est en exécution. Il dispose du processeur.
Pret : Le processus attend que le système lui attribue le
processeur.
SLEEP : Le processus est en attente d’un évènement
particulier (entrée/sortie parexemple).
STOP : Le processus est prêt mais ne demande pas l’accès au
processeur.
ZOMBIE : Le processus se termine. Il attend que son père
prenne en compte sa terminaison et que le système libère ses
ressrources.

19/133
Présentation d’UNIX - Signaux

Signaux

Mécanisme simple de communication entre processus et de


contrôle d’exécution
En général, un nombre (ou un code mnémonique ) entre 1 et
31 (extensible avec la norme POSIX) :
2 (INT) : interruption au clavier (CTRL-c)
9 (KILL) : terminaison du processus (non modifiable)
10 (USR1) : définition par l’utilisateur
11 (SEGV) : violation mémoire (référence invalide)
17 (CHLD) : terminaison d’un fils
20 (TSTP) : arrêt du processus (ctrl-z)
(voir /usr/include/bits/signum.h sous Linux)

20/133
Présentation d’UNIX - Signaux

Signaux

Comportement :
actions prédéfinies (par défaut)
actions redéfinies par le développeur
actions ignorées
Envoi de signaux à partir du terminal : CTRL-C, CTRL-Z, ...
(voir le résultat de la commande stty -a)

21/133
Utilisation d’UNIX

Utilisation d’UNIX

Procédures de connexion et de déconnexion


Commandes de base
Gestion et déplacement dans l’arborescence
Gestion et manipulation des fichiers
Manuel en ligne

22/133
Utilisation d’UNIX

Connexion et déconnexion

Généralités

Sur une machine UNIX, un utilisateur doit être référencé pour


pouvoir l’utiliser
Authentification d’un utilisateur :
nom d’utilisateur (login)
mot de passe (password)
Possibilité d’accéder à son répertoire personnel (répertoire
personnel)

23/133
Utilisation d’UNIX

Connexion

Deux modes : texte et graphique


Connexion : indiquer
son nom d’utilisateur (entrée login)
son mot de passe (entrée password)

Par exemple :
login: hamon <Enter>
Password: ******** <Enter>

24/133
Utilisation d’UNIX

Déconnexion

En mode texte, 3 possibilités :


Votre Nom@Nom de la Machine:1:> logout
Votre Nom@Nom de la Machine:1:> exit
Votre Nom@Nom de la Machine:1:> CTRL-D

En mode graphique :
(Variation d’un gestionnaire de fenêtres à un autre)
Dans les menus, demander la déconnexion, et confirmer la
demande

25/133
Utilisation d’UNIX

Multiboot et arrêt de la machine

Multiboot :
Chaque PC possède deux systèmes d’exploitation (sauf les
salles F206 et F207)
Possibilité du choix du système au démarrage
Arrêt : Après s’être déconnecté, dans un menu, cliquez sur
shutdown ou Éteindre
N.B. : Ne jamais arrêter brutalement la machine (sauf en cas
d’extrême nécessité)
Redémarrage (Reboot), 2 possibilités :
Dans un menu, cliquez sur reboot ou Redémarrer
Tapez la séquence de touche : CRTL-ALT-SUPPR

26/133
Utilisation d’UNIX

Editeurs de texte

Lecture/écriture de fichiers textes bruts (pas d’application de style,


modèle, format, etc.)
Gedit (gedit)
Nano (nano)
Emacs (emacs)

27/133
Utilisation d’UNIX

Editeur de texte : emacs


Exécution : emacs
Utilisation du menu ou de commandes basées sur des combinaisons
de touches
Utilisation important des touches ESC, META, ALT, CTRL, SHIFT
Sortie : CTRL-x CTRL-c
Lecture d’un fichier : CTRL-x CTRL-f
Sauvegarde d’un fichier : CTRL-x CTRL-s
Destruction d’un buffer d’Emacs : CTRL-x k
Aide :
Fonction d’une touche : CTRL-h c ou
CTRL-h k
Description d’une fonction : CTRL-h f

28/133
Commandes Unix

Commandes UNIX de base


Généralités

Commande : programme effectuant une tache particulière


(copie de fichier, tri d’un fichier, etc.)
UNIX fournit de nombreux programmes de base
Ligne de commande : série de caractères tapés et se
terminant par un retour chariot (entrée, Enter)
La commande est la première série de caractères jusqu’à un
séparateur
Les arguments sont les éléments suivants (séparés par des
espaces)
Exécution des commandes à travers un interpréteur de
commandes (Shell) dans un terminal

29/133
Commandes Unix

Syntaxe standard des commandes

commande [argument(s)]

En général :
Lecture des données sur l’entrée standard (par défaut, le clavier)
Écriture des données en sortie sur la sortie standard (par défaut
l’écran)
Écriture des erreurs sur la sortie en erreur standard (par défaut,
l’écran)

Rappel : sous UNIX, les minuscules et les majuscules sont


différenciés

30/133
Commandes Unix

Visualisation du contenu d’un répertoire

ls options répertoires
Options (les plus courantes) :
-a : Affichage des fichiers cachés ou non
-l : Affichage de toutes les informations sur les fichiers (droits
d’accès, propriétaire, taille, dernière date de mise à jour)
Exemple :
ls -l
Affichage à l’écran du contenu du répertoire courant avec les
informations sur les fichiers :
-rw-r--r-- 1 hamon users 902 Nov 25 13:33 exo1.c
drwxrwx--- 2 hamon users 512 Dec 30 10:43 Repertoire1

31/133
Commandes Unix

Déplacement dans un répertoire

cd répertoire
Exemple :
cd /home/air/hamon/Repertoire1
Déplacement dans le répertoire /home/air/hamon/Repertoire1
Utilisation particulière :
cd : Retour au répertoire de connexion
cd .. : Retour au répertoire père
cd - : Retour au répertoire précédent

32/133
Commandes Unix

Affichage du répertoire courant

pwd
Exemple :
cd /users/users/hamon/Repertoire1
pwd

Affichage à l’écran :
/users/users/hamon/Repertoire1

33/133
Commandes Unix

Création et destruction d’un répertoire

Création : mkdir répertoire


Destruction (d’un répertoire vide) : rmdir répertoire
Destruction (d’un répertoire contenant des fichiers) :
rm -r répertoire
Exemples :
mkdir Repertoire1
création du répertoire Repertoire1
rmdir Repertoire1
destruction du répertoire Repertoire1

34/133
Commandes Unix

Copie de fichiers (1)

cp options fichier1 fichier2


(Copie du contenu de fichier1 dans fichier2)

cp options fichier1 [fichier2 ...] répertoire


(Copie du contenu des fichiers fichier1 et fichier2 dans répertoire)
Options :
-i : mode interactif (confirmation avant écrasement)
-R ou -r : copie récursive de répertoires
-p : conserve la date du fichier source

35/133
Commandes Unix

Copie de fichiers (2)

Exemples :
cp /etc/fstab .
cp -r rep1 rep2

36/133
Commandes Unix

Déplacement de fichiers

mv options fichier1 [fichier2 ...] répertoire


Déplacement des fichiers fichier1 et fichier2 dans répertoire
Options :
-i : mode interactif (confirmation avant écrasement).
-f : force la commande
Exemple :
mv fichier1 rep1
N.B. : La commande peut être utilisée pour renommer un
fichier

37/133
Commandes Unix

Destruction de fichiers

rm options fichier1 [fichier2 ...]


Suppression des fichiers spécifiés
Options :
-i : mode interactif (confirmation avant écrasement)
-f : force la commande
-r : supprime récursivement les répertoires
Exemples :
rm fichier1
rm -r repertoire1

38/133
Commandes Unix

Visualisation ou concaténation de fichiers

cat fichier
Affichage du(des) fichier(s) donnés en argument à l’écran (la
sortie standard)
Utiliser pour ajouter plusieurs fichiers les uns à la suite des
autres (concaténation)
Par défaut, la lecture s’effectue sur l’entrée standard et
l’affichage sur la sortie standard
Exemple :
cat /etc/fstab
Affichage à l’écran du contenu du fichier /etc/fstab

39/133
Commandes Unix

Visualisation du début/de la fin d’un fichier


Visualisation d’un fichier page par page

head -n fichier : affichage des n premières lignes d’un fichier


tail -n fichier : affichage des n dernières lignes d’un fichier
Par défaut, n vaut 10
more fichier : Affichage à l’écran, page par page, des fichiers
spécifiés
Autre commande : less
similaire à more mais avec la possibilité de naviguer dans le
fichier

40/133
Commandes Unix

Visualisation du début/de la fin d’un fichier


Visualisation d’un fichier page par page

Exemples :
head -5 /etc/passwd
Affichage de cinq premières lignes du fichier /etc/passwd

tail -5 /etc/passwd
Affichage de cinq dernières lignes du fichier /etc/passwd

more /etc/passwd
Affichage du fichier /etc/passwd page par page

41/133
Commandes Unix

Tri des lignes d’un fichier (1)


sort -ufnr -o fic fichier...
Par défaut, tri par ordre alphabétique
Options :
-u : n’affiche qu’une fois les lignes multiples
-f : ne différencie pas les minuscules des majuscules
-n : effectue un tri numérique
-r : ordre décroissant
-o fic : spécifie un fichier de sortie
-k <premier champ><type>,<dernier champ><type>
Exemples :
sort /etc/passwd
Tri alphabétique des lignes de /etc/passwd
sort -k 6n,6n /etc/fstab
Tri numérique sur le sixième champ de /etc/fstab

42/133
Commandes Unix

Décompte sur un fichier

wc -lwc fichier...
Options :
-l : Affiche que le nombre de lignes
-w : Affiche que le nombre de mots
-c : Affiche que le nombre de caractères
Si aucune option n’est spécifiée, la commande affiche le
nombre de lignes, de mots et de caractères
Exemple :
wc -l /etc/passwd
Affichage du nombre de lignes du fichier /etc/passwd

43/133
Commandes Unix

Substitution de caractères

tr caracteres caracteres < fichier


Substitution d’un caractère par un autre
Le résultat est affiché sur la sortie standard
Suppression des caractères invisibles
On peut utiliser le code hexadécimal du caractère
Exemples :
tr ’[A-Z]’ ’[a-z]’ < /etc/passwd
Substitution des caractères majuscules par les caractères
minuscules correspondant du fichier /etc/passwd
tr ’\011’ ’@’ < /etc/services
tr ’\t’ ’@’ < /etc/services
Substitution du caractère tabulation par le caractère @ dans le
fichier /etc/services

44/133
Commandes Unix

Affichage des colonnes d’un fichier

cut -d delim -f champs fichier


Options :
-d delim : spécifie le délimiteur (entre double quote, ") ;
-f champs : spécifie les champs à afficher (séparés par une
virgule).
Délimiteur par défaut : la tabulation
Exemple :
cut -f1 /etc/fstab
Affichage de la première colonne du fichier /etc/fstab
(séparateur par défaut)

45/133
Commandes Unix

Modification des droits d’un fichier/répertoire (1)

chmod [-R] <classe d’utilisateur >< nature de la


modification>< droit fichiers>
-R : Opération récursive sur les fichiers et les sous-répertoires
classe d’utilisateur :
u : le propriétaire
g : le groupe
o : les autres
a : les trois classes

46/133
Commandes Unix

Modification des droits d’un fichier/répertoire (2)

nature de la modification :
+ ajout du droit
− retrait du droit
= affectation du droit
droit :
r droit en lecture
w droit en écriture
x droit en exécution

47/133
Commandes Unix

Modification des droits d’un fichier/répertoire (3)

Exemples :
chmod g-rw fichier1
chmod -x fichier2

48/133
Commandes Unix

Recherche de fichiers ou de répertoires

find répertoire options


Recherche dans toute l’arborescence à partir du point spécifié
Options courantes :
-name fichier : recherche sur le nom fichier
-print : affiche le résultat de la recherche
! : négation de la recherche
Exemple :
find / -name "fstab" -print
Recherche des fichiers dont le nom est fstab, dans tous les
répertoires

49/133
Commandes Unix

Recherche d’une chaı̂ne de caractères


dans un fichier
grep options expression fichier
Recherche du motif indiqué dans le(s) fichier(s) indiqué(s)
Famille des grep
egrep (extended)
fgrep (fast)
Unité des traitements : la ligne
Options :
i : insensibilisation à la casse
n : numéro de la ligne
c : nombre de lignes
v : tout sauf le motif indiqué

50/133
Commandes Unix

Caractères spéciaux

car signification
. n’importe quel caractère
$ fin de ligne
^ début de ligne
\ caractère de despécialisation
[] groupement exclusif
[^] négation dans les groupements
(|) disjonction sur plusieurs caractères
? 0 ou 1
+ 1 à n
* 0 à n
{n} nombre précis d’occurrences

51/133
Commandes Unix

Grep
Exemples :
grep tcp /etc/service
Sélection des lignes du fichier /etc/services contenant la chaı̂ne
de caractères tcp
grep -c tcp /etc/service
Nombre de lignes du fichier /etc/services contenant la chaı̂ne de
caractères tcp
grep ’[A-Z]’ /etc/passwd
Sélection des lignes du fichier /etc/services contenant un
caractère majuscule
egrep ’(tcp|udp)’ /etc/services
Sélection des lignes du fichier /etc/services contenant les
chaı̂nes de caractères tcp ou udp

52/133
Commandes Unix

Recherche et transformation de motifs


sed

sed s/motif/remplacement :
motif : expression régulière (voir grep)
Définition de sous-bloc à l’aide de \( et \) (des sous-blocs
peuvent être imbriqués)
remplacement : chaine remplaçant le motif correspondant
Utilisation des sous-blocs à l’aide de référence \1, \2, ... (dans
l’ordre d’apparition des sous-blocs)
Lecture des données sur l’entrée standard ou d’un fichier
donné en argument
Ecriture sur la sortie standard
NB : perl ou awk peuvent être préférés

53/133
Commandes Unix

Manuel UNIX et commandes diverses


Manuel UNIX :

man nom : visualisation de l’aide de la commande ou de la


fonction spécifiée
Exemple : man ls : Affichage de l’aide de la commande ls
Commandes diverses :

echo -n message (affichage d’un message à l’écran)


Option : -n (Pas de retour chariot final)
clear (effacement de l’écran)
tar (archivage)
ps (visualisation des programmes exécutés sur la machine – les
processus)
kill (Terminaison d’un processus)
which (Recherche d’une commande)

54/133
Commandes Unix

Commandes associées aux processus

ps [OPTIONS] : affichage de la liste des processus (suivant


les options)
ps : processus associés au terminal
ps aux : tous les processus en exécution dans le système
kill -<NUMSIGNAL> PID : Envoi d’un signal NUMSIGNAL
au processus d’identifiant PID
nice / renice : Gestion de la priorité des processus
top : liste de processus avec évolution en temps réel (q pour
quitter)
reprend les commandes précédentes

55/133
Commandes Unix

Les jobs
Gestion interactive des processus lancés dans un terminal (travaux
ou jobs)
Remarques :
Lors de l’exécution d’une commande ou d’un programme dans
un terminal, le processus associé est en avant plan
Tant que le processus n’est pas terminé, il n’est pas possible
d’accèder à l’interpréteur de commande et de lancer l’excution
d’une nouvelle commande
Le caractère & à la fin de la ligne de commande permet lancer
la commande en arrière plan
Le processus reste associé au terminal (donc les sorties
standards restent l’écran/le terminal)
Basculement en arrière plan pendant l’exécution :
CTRL-Z puis bg

56/133
Jobs UNIX

Les jobs

Identification par numéro (1, 2, 3, etc.) correspondant à


l’ordre d’exécution des processus
Commandes associées
NB : Identifiant précédé par %
jobs : affichage de la liste des jobs associés au terminal
fg [identifiant] : basculement en avant plan d’un
processus (arrêté ou en arrière-plan
fg (valable pour le dernier jobs)
fg %n par le n-ème job

bg [identifiant : basculement en arrière plan d’un


processus (arrêté ou en arrière-plan
Egalement kill

57/133
Jobs UNIX

Autre commande

nohup ligne de commande & : exécution de la commande


en arrière plan et détachée du terminal courant
l’exécution continue après la fin de la session utilisateur
screen : utilitaire permettant de gérer des terminaux virtuels,
notamment sur une machine distant
Attachement et détachement d’une commande à un terminal
virtuel
Continuation de l’exécution du programme après la fin de la
session utilisateur, ou si le terminal virtuel est détaché
Par défaut, utilisation d’un environnement spécifique (variables
d’environnement)

58/133
Interpréteurs de commande - Généralités

Interpréteur de commande : introduction

Interpréteur de commande : l’interface interactive entre


l’utilisateur et le système d’exploitation
Rédaction par l’utilisateur de lignes de commandes ou de
scripts
Interprétation par le shell qui les exécute
Disponibilité de plusieurs mécanismes de communication au niveau
du shell :
Redirection d’entrée/sortie (programme = filtre)
Tubes
Possibilité d’utilisation d’expressions régulières

59/133
Interpréteurs de commande - Généralités

Les fichiers standard

Chaque programme se voit associer trois fichiers standard :


Le fichier d’entrée contenant les données utilisées par le
programme (par défaut, le clavier)
Le fichier de sortie contenant les résultats du programme (par
défaut l’écran)
Le fichier de sortie des erreurs lors de l’exécution du
programme (par défaut, l’écran)

60/133
Interpréteurs de commande - Généralités

Redirection d’entrée/sortie (1)

Redirection sortante

Redirection de l’écran vers un fichier, pour stocker les résultats


Avec le signe de redirection sortante : >
Programme > fichier
Exemple :
tail fichier.txt > 10premiereslignes.txt
Attention, > écrase le fichier s’il existe. Pour ajouter
(concaténer) les résultats dans un fichier, on utilise le signe
>>
Option -o pour certaines commandes

61/133
Interpréteurs de commande - Généralités

Redirection d’entrée/sortie (2)

Redirection entrante

La plupart des commandes : données traitées par défaut à partir


du clavier, si pas de mention de nom de fichiers en argument

Cas particulier : la commande tr lit obligatoirement le clavier.

Pour que les commandes lisent les données dans un fichier, on peut
utiliser le symbole de redirection entrante <

62/133
Interpréteurs de commande - Généralités

Redirection d’entrée/sortie (3)

Redirection entrante

Exemples :
tr ’\011’ ’\@’ < fichier.txt
tail < fichier.txt

Les deux modes de redirection peuvent être combinés :


tail < fichier.txt > fin fichier.txt

63/133
Interpréteurs de commande - Généralités

Les tubes (1)

Visualiser les résultats d’une commandes :


sauvegarde dans un fichier, puis utilisation cat ou more
ps aux > ps-aux.txt
more ps-aux.txt
→ peu pratique !
Les tubes sont plus adaptés
Passage d’informations d’une commande à une autre :
Création d’un canal de communication, symbolisé par | : le
tube
Les données produites par la première commande sont
communiquées à la seconde commande pour qu’elle puisse les
traiter

64/133
Interpréteurs de commande - Généralités

Les tubes (2)

Exemples :
ps aux | more
Affichage des résultats de la commande page par page
head fichier1.txt | tail -2
Affichage de la neuvième et de la dixième ligne du fichier
fichier1.txt

65/133
Interpréteurs de commande - Scripts shell

Les scripts (1)

Combinaison de commandes permettant d’effectuer une tâche


spécifique
Pour les tâches reproduites fréquemment : rédaction de
scripts shell qui exécute la suite de commandes
Exemple :
#!/bin/bash
# 10 dernieres lignes triees

sort $1 | tail
$1 est une variable correspondant au premier argument

66/133
Interpréteurs de commande - Scripts shell

Les scripts (2)

Si on ne met pas de variable (donc pas de prise en compte


d’arguments) :
le programme agit comme un filtre et lit les données sur
l’entrée standard

Pour exécuter le script, il faut donner les droit en exécution


sur le script

Les scripts sont exécutables comme des programmes


quelconques

67/133
Shells

Shells : Introduction (1)

Langage de programmation interprété


−→ Interpréteurs de commande standard des systèmes UNIX
Utilisations :
1 Ouverture de session
2 Dialogue avec le système d’exploitation par l’intermédiaire d’un
interpréteur de commandes
3 Scripts
Commentaires sur les shells :
Avantages : clair et facile à relire
Inconvénient : demande de la rigueur lors de la programmation
(pas de pré-compilation)

68/133
Shells

Shells : Introduction (2)

Nombreux shells répartis en 2 familles :


Famille des Bourne Shells (Steve Bourne) : sh, bash
Famille des C Shells : csh, tcsh
Autres:
ksh (David Korn) : famille des Bourne Shells avec
améliorations issues des C Shells
Présentation du Bourne Shell et de sa programmation

69/133
Shells - Notions communes

Notions communes aux shells

Exécution de trois types de commandes :


commandes internes faisant partie du shell
commandes externes contenues dans les répertoires
fonctions ou alias définissant de nouvelles commandes

70/133
Shells - Notions communes

Utilisation interactive du shell

Complétion d’une commande : Début de la commande suivi


de [TAB]
Gestion de l’historique des commandes :
Affichage : history
Exécution de la n-ième commande de l’historique : !n
!324
gcc -o testIUW testIUW.c
Exécution de la dernière commande commençant par la chaine
XXX : !XXX
!g
gcc -o testIUW testIUW.c

71/133
Shells - Commandes

Commandes internes

Pas de création de nouveau processus


commandes normales, fréquemment utilisées : cd, pwd,
umask, set, etc.
directives algorithmiques : if, then, else, while, case,
for, etc.

72/133
Shells - Commandes

Commandes externes

Indépendantes du shell
Identiques quel que soit le shell utilisé
Accès grâce à la variable d’environnement PATH (énumération
d’une liste de répertoires contenant les commandes)
Création d’un nouveau processus à chaque exécution

73/133
Shells - Commandes

Priorité des commandes

1 commande définie dans une fonction shell (dans .profile)


2 commande interne
3 commande externe dans l’ordre des répertoires de PATH

74/133
Shells - Initialisation

Initialisation des shells

Utilisation de fichiers contenus dans le répertoire HOME (répertoire


de connexion)
.profile, .bashrc (Bourne Shell)
.cshrc, .tcshrc (C Shell)
Permet :
Exécution d’une commande
Initialisation des variables d’environnement (utilisées par le
shell ou les commandes)

75/133
Shells - Initialisation

Initialisation des Bourne Shells (1)

Avant affichage de l’invite ($), exécution de 2 fichiers :


/etc/profile géré par l’administrateur
/etc/profile lit notamment /etc/bash.bashrc
.profile dans le répertoire HOME géré par l’utilisateur
$HOME/profile lit notamment $HOME/.bashrc
Après modification du fichier .profile, il faut prendre en
compte de son contenu :
$ cd
$ . .profile
ou
source .profile

76/133
Shells - Initialisation

Initialisation des Bourne Shells (1)

Commentaires :
en général, on modifie le fichier $HOME/.bashrc et on peut se
limiter à recharger ce fichier
l’initialisation consiste à positionner des variables
d’environnement, créer des alias ou des fonctions
le rechargement d’un fichier .bashrc ne réinitialise pas
l’environnement mais le fait évoluer
Pour le  réinitialiser , il faut ouvrir une nouvelle session ou
un nouveau shell

77/133
Shells - Variables d’environnement

Variables d’environnement
Utilisation par certaines commandes
Exportées vers tous les fils du shell
Initialisation automatique et la valeur ne doit pas être
modifiée : HOME, LOGNAME, USER
Initialisation automatique et la valeur peut être modifiée :
SHELL, PATH, TERM
Initialisation par l’utilisateur dans son fichier .profile ou en
mode interactif : PRINTER, LPDEST
Initialisation :
VARIABLE=valeur
export VARIABLE
export définit la portée de la variable et indique qu’il s’agit
d’une variable d’environnement

78/133
Shells - Variables d’environnement

Principales variables d’environnement (1)

HOME : (définie automatique) contient le nom du répertoire de


connexion. La variable est utilisée par cd
USER (BSD 4.[23]) et LOGNAME (System V) : contient le nom
de connexion (login) de l’utilisateur
TERM : (définie automatiquement par l’administrateur
système) contient le nom du terminal utilisé.
Définition du terminal fournie aux commandes effectuant un
gestion d’écran.

79/133
Shells - Variables d’environnement

Principales variables d’environnement (2)

TERMCAP (BSD 4.[23]) : contient le chemin d’accès à la base


des terminaux, ou la définition correspondant à la valeur de
TERM lue dans le fichier /etc/termcap
Initialisation à l’aide de tset
Par défaut, non initialisée
TERMINFO (System V) : contient le chemin d’accès à la base
des terminaux. Définition recherchée par défaut dans
/usr/lib/terminfo/X/$TERM
EXINIT : contient les commandes exécutées lors de l’appel de
l’éditeur vi (définition d’options de fonctionnement et des
touches de fonctions)

80/133
Shells - Variables d’environnement

Principales variables d’environnement (3)

PATH : contient la liste des répertoires dans lesquels un shell


recherche une commande (nom des répertoires séparés par : )
CDPATH : contient la liste des répertoires balayés lors d’un
changement de répertoire lorsque l’argument de cd est un
nom relatif (nom des répertoires séparé par :)
SHELL : contient le nom du shell de connexion (utilisée par
make, mail, vi, more, etc.
MAIL : contient le nom de la boı̂te aux lettres
(/var/mail/$LOGNAME)

81/133
Shells - Variables d’environnement

Principales variables d’environnement (4)

PRINTER (BSD 4.[23]) : définit le nom de l’imprimante


utilisée (par défaut, lp)
LPDEST (System V) : redéfinit le nom de l’imprimante utilisée
par défaut (redéfinition par l’administrateur système)

NB : Il est possible d’ajouter ses propres variables d’environnement


avec export
Exemple :

export JAVA_HOME=/usr/java/jdk-11.0.1

82/133
Shells - Alias

Alias
Objectifs : remplacer une commande par une autre ou
modifier son comportement, abréger une igne de commande
principalement utile dans une session interactive (à éviter dans
un script
Création : alias nom=valeur
Utilisation : nom de l’alias
Suppression : unalias nom
Liste des alias : alias (sans argument)
Exemples :
alias rm=’rm -i’
alias ls=’ls -F’

ls /

83/133
Shells - Caractères spéciaux

Caractères spéciaux

Caractères ayant une signification spéciale :


Utilisés pour la génération de noms de fichiers (expressions
régulières ou rationnelles) : *, ?, etc.
Définis pour différentes fonctionnalités : #, $, &, etc.

84/133
Shells - Caractères spéciaux

Génération de noms de fichiers (1)

Génération par rapport aux fichiers du répertoire courant ou


d’un répertoire désigné explicitement
Caractères de remplacement
* : n’importe quelle chaı̂ne de caractères (y compris la chaı̂ne
vide)
? : un caractère quelconque (joker )
[...] : un des caractères entre crochets.
Définition par
Énumeration ([Aa])
Intervalle suivant le code ASCII ([A-Za-z])
La négation est exprimée avec le caractère ! ou ^

85/133
Shells - Caractères spéciaux

Génération de noms de fichiers (2)

Exemples :

$ echo .b*
.backups .bash_history .bash_logout .bash_profile
.bashrc

$ echo .[bc]*
.backups .bash_history .bash_logout .bash_profile
.bashrc .cshrc .cshrc.home

86/133
Shells - Caractères spéciaux

Autres caractères spéciaux (1)

# : introduction d’un commentaire


# un commentaire
$ : introduction d’une variable
echo $SHELL
& : terminaison d’une commande lancée de manière
asynchrone (background)
sauvegarde.sh &
; : séparateur des commandes dans une ligne de commande
ls ; ps aux > fichier_ps.txt

87/133
Shells - Caractères spéciaux

Autres caractères spéciaux (2)

> < >> << | : définition de redirection (voir plus haut et


plus loin)
’ : délimitation d’une chaı̂ne de caractères. Pas de
substitution des variables. Les caractères spéciaux perdent
leur signification.
Exemple :
$ ls ’$HOME’
ls: $HOME: No such file or directory

$ echo ’$HOME’
$HOME

88/133
Shells - Caractères spéciaux

Autres caractères spéciaux (3)

" : délimitation d’une chaı̂ne de caractères


Les variables sont substituées par leur valeur. Les caractères
spéciaux perdent leur signification sauf " ’ \ $
Exemple :
$ ls "$HOME"
Enseignement Mail tmp
Doc Program Recherche
AdminLinux LISN Projets
Articles Emacs local
[thierry@broceliande thierry]$ echo "$HOME"
/home/hamon
\ : Perte de la signification du caractère spécial
(déspécialisation)

89/133
Shells - Caractères spéciaux

Autres caractères spéciaux (4)

( et ) : exécution des commandes entre parenthèses dans un


sous-shell
$ pwd
/home/hamon
$ (cd /tmp; rm test.* ; ls )
$ pwd
/home/hamon
‘ ‘ (quotes inversées) : substitution d’une commande par son
résultat
Exemple :
USERID=‘id -u‘
{ et } : regroupement de commandes dans une liste de
commandes

90/133
Shells - Chaı̂nes de caractères

Chaı̂nes de caractères

Shell :
essentiellement, manipulation de chaı̂nes de caractères
or, certains caractères sont utilisés de manière particulière par
le shell (voir précédemment)
nécessité de la mise en place de protection des caractères et
des chaı̂nes de caractères
Nombreuses opérations de manipulation de chaı̂nes de
caractères

91/133
Shells - Chaı̂nes de caractères

Protection des caractères et des chaines


1 Protection de caractères : \ avant le caractère
echo * ; echo \*
2 Protection partielle d’une chaı̂ne : entourer la chaı̂ne avec le
caractère "
Seuls les caractères $, \, ’ et " ne sont pas protégés
echo "*"
echo " <\"$HOME\"> "
3 Protection totale d’une chaı̂ne : entourer la chaı̂ne avec le
caractère ’
Seul le caractère ’ n’est pas protégé
echo ’*’
echo ’ <"$HOME"> ’

92/133
Shells - Chaı̂nes de caractères

Manipulation de chaı̂nes de caractères

Nombreuses opérations :
Longueur d’une chaı̂ne : ${#chaine}
echo ${#HOME}
Extraction d’une sous-chaine :
à partir d’un indice i : ${chaine:i}
ch="12a13b14a15" ; echo ${ch:3}
de taille nà partir d’un indice i : ${chaine:i:n}
ch="12a13b14a15" ; echo ${ch:3:6}

93/133
Shells - Chaı̂nes de caractères

Manipulation de chaı̂nes de caractères

Suppression d’une sous-chaine


la plus courte à gauche : ${chaine#motif}
ch="12a13b14a15" ; echo ${ch#*a}
la plus longue à gauche : ${chaine##motif}
ch="12a13b14a15" ; echo ${ch##*a}
la plus courte à droite : ${chaine%motif}
ch="12a13b14a15" ; echo ${ch%a*}
la plus longue à doite : ${chaine%%motif}
ch="12a13b14a15" ; echo ${ch%%a*}

94/133
Shells - Chaı̂nes de caractères

Manipulation de chaı̂nes de caractères

Remplacement d’une sous-chaı̂ne


Première occurrence : ${ch/motif/ssch
ch="12a13b14a15" ; echo ${ch/1/un}
La plus longue sous-chaı̂ne : utilisation du caractère générique
(*) dans le motif
ch="12a13b14a15" ; echo ${ch/2*4/=}
Toutes les occurrences : ${ch//motif/ssch
ch="12a13b14a15" ; echo ${ch//1/un}
...

95/133
Shells - Exécution d’un script

Exécution d’un script

Deux manières :
sh fichierscript arg1 arg2
Utilisée lors de la mise au point, avec l’option -x (affichage
des commandes et des arguments)
fichierscript arg1 arg2
Utilisée après mise au point
Positionnement des droits d’exécution
Script placé dans un répertoire défini dans la variable PATH

Appel quel que soit le shell courant : utilisation de la directive


d’exécution #!/bin/sh ou #!/bin/csh (suivant le shell
utilisé dans le script)

96/133
Shells - Exécution d’un script

Passage des arguments

Arguments reçus dans le script sous forme de variables : $0


(nom du script), $1, $2, $3, $4, ..., $9
Variables prédéfinies :
$# : nombre d’argument ($0 non compris)
$$ : PID du sous-shell exécutant le script
$*, $@ : liste des paramètres
"$*" équivalent à "$1 $2 $3 ..."
"$@" équivalent à "$1" "$2" "$3" ...
$? : code de retour de la dernière commande
$! : numéro du dernier processus lancé de manière asynchrone

97/133
Shells - Exécution d’un script

Redirections d’entrée/sortie standard (1)


L’entrée ou les sorties standard peuvent être redéfinies comme des
fichiers
Redirection de l’entrée standard : <
L’entrée standard correspond à un fichier
Exemple :
$ tail < essai.c
Redirection de la sortie standard : >1
Exemple :
$ gcc essai.c -o essai >1 resultat-compil.out
Redirection de la sortie standard des erreurs : >2
Exemple :
$ gcc essai.c -o essai >2 resultat-compil.err

98/133
Shells - Exécution d’un script

Redirections d’entrée/sortie standard (2)

Redirection des deux sorties : > et 2>&1


Exemple :
$ gcc essai.c -o essai >1 resultat-compil.out \
>2 resultat-compil.err

$ gcc essai.c -o essai > \


resultat-compil.out+err 2>&1

99/133
Shells - Exécution d’un script

Type d’exécution

Différentes méthodes d’exécution d’une commande :


1 Exécution interactive ou foreground
2 Exécution asynchrone ou background
3 Abandon du shell
4 Terminaux virtuels

100/133
Shells - Exécution d’un script

Exécution interactive ou foreground

Exécution dans le terminal et contrôle du terminal rendu après


terminaison
Interruption avec le caractère de contrôle d’interruption de
processus (en général CTRL-C)
Exemple :
$ gcc essai.c -o essai

101/133
Shells - Exécution d’un script

Exécution asynchrone ou background

Exécution dans le terminal suivie du caractère &


Le contrôle du terminal est rendu immédiatement
Utilisation pour l’exécution d’une commande dont le résultat
n’est pas instantané (compilation longue, par exemple)
Exemple :
$ gcc essai.c -o essai &
Utilisation des redirections des sorties standard et des erreurs
pour éviter les affichages intempestifs à l’écran

102/133
Shells - Exécution d’un script

Abandon du shell et Terminaux virtuels

Abandon du shell
Réception du signal HANGHUP par la commande en exécution
asynchrone
Masquage possible du signal (et TERM) avec la commande
nohup
Exemple :
$ nohup gcc essai.c -o essai > essai.out 2>&1 &
Terminaux virtuels
Utilisation de la commande screen

103/133
Structures de contrôle

Structures de contrôle

Commandes séparées par un caractère de séparation de


commande correspondant à un opérateur bouléen : && ||
grep -q tcp /etc/services && ls -l /etc/services
Mots clés reconnus en position syntaxique d’une commande
(début de ligne) : test
Branchements (if, case)
Boucles (for, while, until)

104/133
Structures de contrôle

test (1)

Permet des tests de fichiers et de comparaison élaborés


Retour :
0 si la condition est vraie
différent de 0 si la condition est fausse
Syntaxe :
test expression
ou
[ expression ]

105/133
Structures de contrôle

test (2)

Forme de l’expression :
-f name : vrai si name est
un fichier régulier (sous System V) ;
un fichier au sens large (fichier régulier, fichier spécial bloc ou
caractère, tube nommé) et n’est pas un répertoire
-d name : vraie si name est un répertoire
-c name : vraie si name est un fichier spécial caractère
(System V)
-b name : vraie si name est un fichier spécial bloc (System V)
-g name : vraie si name existe avec le bit sgid positionné
(System V)

106/133
Structures de contrôle

test (3)

-k name : vraie si name existe avec le sticky bit positionné


(System V)
-u name : vraie si name existe avec le bit suid positionné
(System V)
-p name : vraie si name est un tube nommé (System V)
-r name, -w name, -x name, : vraie si name est un fichier
avec accès en lecture, écriture, exécution
-s name : vraie si name est un fichier de taille non nulle

107/133
Structures de contrôle

test (4)

-z string : vraie si string est une chaı̂ne de caractères vide


-n string : vraie si string est une chaı̂ne de caractères non
vide
s1 == s2 ou s1 = s2 : vraie si les chaı̂nes de caractères s1
et s2 sont égales (inégalité : !=)
n1 -eq n2 : vraie si les chaı̂nes de caractères n1 et n2
contenant des nombres entiers sont égales (utilisation aussi de
-ne, -gt, -ge, -lt, -le
Opérateurs logiques : ! (NON), -a (ET), -o (OU)

108/133
Structures de contrôle

test (5)

Exemple :

if [ -f $1 -o -d $1 ]
then
echo "Le fichier $1 est un fichier regulier
ou un repertoire"
else
echo "Le fichier $1 n’est ni un fichier
regulier ni un repertoire"
fi

109/133
Structures de contrôle

if (1)

Syntaxe :

(else facultatif) (if multiples)

if condition1
then
if condition
liste des commandes
then
elif condition2
liste des commandes
then
else
liste des commandes
liste des commandes
else
fi
liste des commandes
fi

110/133
Structures de contrôle

if (Exemple)

if test $# != 1
then
echo "Zero ou plusieurs arguments"
else
echo "Un argument : $1"
fi

111/133
Structures de contrôle

Calcul arithmétique (1)


Réalisation d’arithmétique élémentaire :
expr ou $(( expression ))
Opérateurs : + - * / %
La multiplication * doit être déspécialisée si l’expression n’est
pas quotée
Exemples :
$ a=10
$ a=‘expr $a + 1‘
$ # ou
$ a= $(( $a + 1 ))
$ b=‘expr 10 + 5 \* 4‘
$ # ou
$ b=$(( 10 + 5 \* 4 ))
$ echo "$a ; $b"
11 ; 30

112/133
Structures de contrôle

Calcul arithmétique (2)


comparaison de chaı̂nes

La forme expr1 : expr2 permet la comparaison des deux


motifs et l’affichage du nombre de caractères reconnus
Exemple :
$ a="a10zr"
$ nbchars=‘expr "$a" : ’.*’‘
$ echo $nbchars
5

113/133
Structures de contrôle

Condition multiple case


Syntaxe :
case identificateur in
motif1)
liste de commandes
;;
motif2)
liste de commandes
;;
motif3|motif4)
liste de commandes
;;
...
motifn)
liste de commandes
;;
esac

NB : le motif * permet la gestion du case par défaut

114/133
Structures de contrôle

Condition multiple case (Exemple)

case $1 in
Sun) echo "Dimanche";;
Mon) echo "Lundi";;
Tue) echo "Mardi";;
Wed) echo "Mercredi";;
Thu) echo "Jeudi";;
Fri) echo "Vendredi";;
Sat) echo "Samedi";;
*) echo "Jour inconnu";;
esac

115/133
Structures de contrôle

for

Syntaxe :
for identificateur in liste_de_valeurs
do
liste de commandes
done

116/133
Structures de contrôle

for

Exemple :
for i in 1 2 3 4 5
do
echo $i
done

for i in ‘seq 1 5‘
do
echo $i
done
La commande seq permet la génération d’une suite d’entiers

117/133
Structures de contrôle

boucle while
Syntaxe :
while condition
do
liste de commandes
done
Exemple :
i=1
fin=10
while [ $i -le $fin ]
do
echo $i
i=‘expr $i + 1‘
done

118/133
Structures de contrôle

boucle until
Syntaxe :
until condition
do
liste de commandes
done
Exemple :
i=1
until [ $i -gt 10 ]
do
echo $i
i=‘expr $i + 1‘
done

119/133
Structures de contrôle - Fonctions

Les fonctions (1)

Mot clé : function ou non


Bloc d’instruction entre accolades
Valeur de retour : return [n]
n doit être une valeur numérique
Localisation de variable (limite de visibilité) : local
Arguments d’une fonction sous forme de variables : $0 (nom
du script), $1, $2, $3, $4, ..., $9
Appel : nom de la fonction suivi des arguments si nécessaire
récupération de la valeur de retour avec $?

120/133
Structures de contrôle - Fonctions

Les fonctions (2)

Exemples :
function helloworld {
helloworld () {
echo "Hello World"
echo "Hello world $1"
return 0 ;
return 1;
}
}
helloworld titi
helloworld
echo $?
echo $?

121/133
Tableaux

Tableaux : introduction

Deux types de tableaux


tableaux classiques (éléments indexés par une valeur
numérique)
tableaux associatifs (éléments indexés par une chaı̂ne de
caractères)

122/133
Tableaux

Tableaux classiques
Tableau dont les éléments sont indexés par une valeur numérique
Déclaration et initialisation : declare -a nom_tab ou
declare -a nom_tab=(valeur1 valeur2 ...)
Premier indice : 0
declare -a tab1
declare -a tab1=(ener info instru macs tele)
Affichage de la liste des tableaux : declare -a
$ declare -a
declare -a BASH_ARGC=()
declare -a BASH_ARGV=()
...
declare -a tab1=([0]="ener" [1]="info" [2]="instru" [3]="macs" [4]=

123/133
Tableaux

Tableaux classiques
Accès à un élément :
Lecture : ${nom_tab[indice]}
echo "${tab1[0]}"
a=1 ; echo "${tab1[a]}"
Écriture : nom_tab[indice]
tab1[5]=infoa

$ read tab1[5] tab1[6]


enera infoa
Liste des éléments : declare -p nom_tab
$ declare -p tab1
declare -a tab1=([0]="ener" [1]="info" [2]="instru" [3]="macs" [4]=

124/133
Tableaux

Tableaux classiques

Opérations sur un élément :


Opérateurs compatible avec le type de la valeur
(arithmétiques, sur les chaı̂nes de caractères)
Suppression d’un élément : unset nom_tab[indice]
unset tab1[5]
Longueur d’un élément : ${#nom_tab[indice]}
echo ${#tab1[6]}

125/133
Tableaux

Tableaux classiques
Opérations sur un tableau
Liste des valeurs : ${nom_tab[@]}
NB : éviter ${nom_tab[*]} car une seule chaı̂ne de caractères
for e in "${tab1[@]}" ; do
echo $e
done
Taille : ${#nom_tab[@]}
echo ${#tab1[@]}
Liste des indices : ${!nom_tab[@]}
echo ${!tab1[@]}

126/133
Tableaux

Tableaux classiques

Copie de tableaux : nouv_tab=( "${nom_tab[@]}" )


tab2=( "${tab1[@]}" )
Suppression de tableaux : unset nom_tab
unset tab1
Ajout d’éléments :
Au début :
nom_tab=( valeur0 valeur1 ... "${nom_tab[@]}" )
tab1=( enera infoa "${tab1[@]}" )
A la fin : nom_tab+=( valeur1 valeur2 ... )
tab1+=( enera infoa )

127/133
Tableaux

Tableaux associatifs
Tableau dont les éléments sont indexés par une chaı̂ne de
caractères (clé)
Déclaration et initialisation : declare -A nom_tabA ou
declare -a nom_tabA=([cle1]=valeur1 [cle2]=valeur2 ...)
declare -A tabA1
declare -A tabA1=([France]=33 ["Etats Unis"]=1 [Ukraine]=380)

Affichage de la liste des tableaux : declare -A (impérative


pour la création d’un tableau)
~$ declare -A
declare -A BASH_ALIASES=()
declare -A BASH_CMDS=()
...
declare -A tabA1=([Ukraine]="380" ["Etats Unis"]="1" [France]="33"

128/133
Tableaux

Tableaux associatifs
Accès à un élément :
Lecture : ${nom_tabA[cle]}
echo "${tabA1[France]}"
a=France ; echo "${tabA1[$a]}"
Écriture : nom_tabA[cle]
tabA1[Allemagne]=49

$ read tabA1[Belgique] tabA1[Italie]


32 39
Liste des couples clé/valeur : declare -p nom_tabA
$ declare -p tabA1
declare -A tabA1=([Allemagne]="49" [Ukraine]="380" [Belgique]="32"
[Italie]="39" ["Etats Unis"]="1" [France]="33" )

129/133
Tableaux

Tableaux associatifs

Opérations sur un élément :


Opérateurs compatible avec le type de la valeur
(arithmétiques, sur les chaı̂nes de caractères)
Suppression d’un élément : unset nom_tabA[cle]
unset tabA1[Italie]
Longueur d’un élément : ${#nom_tabA[cle]}
echo ${#tabA1[Belgique]}

130/133
Tableaux

Tableaux associatifs

Opérations sur un tableau associatif


Liste des valeurs : ${nom_tabA[@]}
for e in "${tabA1[@]}" ; do
echo $e
done
Taille : ${#nom_tab[@]}
echo ${#tabA1[@]}
Liste des clés : ${!nom_tabA[@]}
echo ${!tabA1[@]}

131/133
Tableaux

Tableaux associatifs

Ajout d’éléments :
nom_tabA+=( [cle1]=valeur1 [cle2]=valeur2 ... )
tabA1+=( [Espagne]=34 [Portugal]=351 )
Copie de tableaux :
declare -A nouv_tab puis copie itérative
declare -A tabA2
for c in "${!tabA1[@]}" ; do
tabA2+=( [$c]="${tabA1[$c]}")
done
Suppression de tableaux : unset nom_tabA
unset tabA1

132/133
Conclusion

Conclusion

Notions de base sur les systèmes d’exploitation (fichiers,


processus, commandes systèmes)
Programmation Shell : possibilité d’interagir avec le système
de manière simple (à l’aide briques de base), en ligne de
commande ou avec des scripts
Interaction avec le système d’exploitation d’un point de vue
utilisateur (averti)
Les mêmes notions seront abordées en dtail et d’une point de
vue programmation dans le cours de Système d’exploitation

133/133

Vous aimerez peut-être aussi