Vous êtes sur la page 1sur 59

Utilisation du shell

Bash

1
Introduction
 Le shell est l'environnement utilisateur en
mode texte sous Linux.
 C'est le programme qui se charge de lire et

d'exécuter les commandes que l'utilisateur


saisit.
 Exemples: sh, ksh, csh, bash.

 Bash: Le plus utilisé dans les systèmes UNIX.

 bash: Bourne Again Shell, nouvelle variante de

sh.
2
Contrôle des processus
Lancement d'un programme en arrière-plan
 S'assurer que la commande n'est pas
interactive;
 Ajouter une esperluette (caractère « & ») à la

fin de la ligne de commande.


 Exemple: cp /cdrom/kernel/linux-2.6.6.tar.gz .

&
 Le premier nombre, entre crochets, est le

numéro de « job » du shell


 Le deuxième numéro est le numéro de

processus (PID) 3
Contrôle des processus
Listing des processus
 jobs: affiche, dans l'ordre, le numéro de job,
l'état du processus correspondant, et la ligne
de commande.
 Informations plus complètes sur les processus:

ps [options]
 x: Afficher toutes les commandes en cours
d’exécution.
 a: afficher toutes les commandes, pour tous les

utilisateurs connectés.

4
Contrôle des processus
Notion de signal
 Signal: message envoyé à un processus.
 L'envoi d'un signal: kill [-signal] PID
Numéro de
Signification
signal

15 Signal de terminaison de processus.

Signal de destruction inconditionnelle de


9 processus.

19 Signal de suspension de processus.

Signal de reprise d'exécution d'un


18 processus suspendu. 5
Contrôle des processus
Arrêt d'un processus
 CTRL+C s’il est en premier plan.
 Signal de terminaison à l'aide de la commande

kill

6
Contrôle des processus
Gel d'un processus
 CTRL+Z, lorsque le processus est en avant-
plan
 Signal 19 au processus (signal « STOP ») à

l'aide de la commande kill

7
Contrôle des processus
Relancement d'un processus
 Relancer un processus en avant-plan: fg
[%N°job]
 Relancer un processus en arrière-plan: bg

[%N°job]
 On peut remplacer le PID par %Job

8
Redirections

 Chaque processus possède 3 flux standards:


 l'entrée standard nommée stdin (identifiant 0) : il
s'agit par défaut du clavier,
 la sortie standard nommée stdout (identifiant 1) : il

s'agit par défaut de l'écran,


 la sortie d'erreur standard nommée stderr

(identifiant 2) : il s'agit par défaut de l'écran.

9
Redirections
Rediriger la sortie standard
 Rediriger la sortie vers un fichier en utilisant le
signe >
 Exemple: ls>resultat_ls

 Si le fichier existe déjà, il est écrasé.

 Concaténation: >>

 Exemple: ls>>resultat

10
Redirections
Rediriger la sortie standard

11
Redirections
Rediriger la sortie d’erreur standard

12
Redirections
Rediriger la sortie d’erreur standard
 Rediriger la sortie d’erreur vers un fichier en
utilisant le signe 2>
 Exemple: ls /abc 2> erreurs_ls

 Si le fichier existe déjà, il est écrasé.

 Concaténation: 2>>

 Exemple: ls /abc 2>>resultat_erreurs

13
Redirections
Rediriger l’entrée standard

14
Redirections
Rediriger l’entrée standard
 Rediriger l'entrée standard permet d'entrer des
données provenant d'un fichier au lieu du
clavier.
 On utilise le signe <

 Exemple: cat<mon_fichier

15
Redirections
Rediriger l’entrée standard
 Remarque : le double chevron ouvrant <<
s'utilise pour lire du clavier ligne par ligne.
 Exemple :

– $sort <<blabla
– >Salut
– >Bonjour
– >Au revoir
– >blabla

16
Les tubes

 Pour rediriger le résultat d'une commande


dans le flux d'entrée d'une autre commande.
 utiliser l'opérateur '|'.

 Exemples:
 ls | less
 tar cv * | gzip > archive.tar.gz

17
Les tubes
Exemples
 Afficher la taille des fichiers et répertoires, et les trier du
plus grand au plus petit : $ du | sort -rn
 Même résultat, affiché page par page : $ du | sort -rn |
more
 Connaître le nombre de fichiers du répertoire /usr/bin: $
ls -1 /usr/bin | wc –l
 L'option -1 affiche un fichier ou répertoire par ligne. wc avec
-l (line) compte le nombre de lignes.
 Connaître tous les périphériques IDE détectés par le
noyau Linux et les afficher page par page : $ dmesg |
grep hd | more
 Explications : la commande dmesg affiche les messages du
noyau Linux détectés durant le boot.
18
Les tubes
La commande tee
 Renvoi les données de flux d’entrée standard
vers le flux de sortie standard, et les redirige
vers un fichier: tee fichier.
 Exemple: rediriger tous les messages (d'erreur

ou non) de la commande ls /proc/1/* dans un


fichier result.txt, tout en continuant à les
visualiser sur l'écran :
 ls -l /proc/1 2&>1 | tee result.txt

19
Les tubes
La commande xargs
 Permet d'appeler une autre commande, en
passant en paramètre les données qu'elle
reçoit dans le flux d'entrée standard.
 Syntaxe: xargs <commande>

 Exemple: find -name "*.txt" | xargs grep "test"

20
Manipulation des variables
d'environnement
 L'environnement d’exécution est un ensemble de
paramètres (variables d'environnement) qui permettent
de modifier le comportement du programme. Elles
contiennent une valeur de type chaîne de caractères.
 Création: variable=valeur
 afficher le contenu de la variable BONJOUR: echo
$BONJOUR
 Pour rendre une variable du shell accessible aux
programmes que celui-ci peut lancer, il faut l'exporter
dans l'environnement d'exécution: export variable
 Supprimer la variable : unset variable
 Afficher l’ensemble des variables: set
 Variables utilisées: HOME, USER, PATH, …
21
Manipulation des variables
d'environnement
 Créer un tableau : tableau=('val0' 'val1' 'val2')
 Accéder à une case du tableau : ${tableau[0]}
 Affecter une valeur à une case du tableau :
tableau[5]='val5'
 Remarque : la numérotation des cases peut ne pas être
continue
 Afficher tout le contenu du tableau : ${tableau[*]}

22
Scripts shell
 Script shell: fichier texte dans lequel on met des
commandes afin de les exécuter.
 La 1ère ligne doit indiquer la nature du fichier: #!shell
 Exemple: #!/bin/bash
 Les paramètres des scripts shell sont accessibles par les
variables $1, $2, $3, …
 Le code de retour d'un shell pourra être fixé à l'aide de la
commande exit.
 Exemple: exit 0
 Vérifier la valeur de $?
 Tester un script shell:
 chmod u+x script.sh
 ./script.sh , . script.sh , source script.sh ou bash script.sh

23
Caractères d’échappement et
chaînes de caractères
 Plusieurs caractères sont interprétés par le shell (<, >,
etc).
 Annuler l’interprétation: précéder le caractère par \
 Exemple: mkdir \<
 En fin de ligne: pour enlever le retour à la ligne.
 Exemple:
 ls \
 -l
 Annuler l’interprétation sur toute une chaîne: Mettre la
chaîne entre guillemets simples ' '
 Annuler l’interprétation sauf pour $, ` et \: Mettre la
chaîne entre guillemets doubles " ".
24
Les substitutions
Génération de chaînes de caractères selon
un motif
 Ce motif est toujours constitué d'un préfixe,
suivi d'une partie variable, suivie d'un suffixe.
 ls test{0,1,2,3,4} sera transformée par le shell

en la commande suivante : ls test0 test1 test2


test3 test4

25
Les substitutions
Substitution du nom d'utilisateur
 Le caractère tilde ('~') est remplacé par le nom
de l'utilisateur courant ou, par le chemin sur le
répertoire personnel de cet utilisateur.
 cp *.txt ~rachid: copier tous les fichiers

d'extension .txt dans le répertoire personnel de


l'utilisateur rachid.

26
Les substitutions
Remplacements de variables
 $variable
 La syntaxe exacte complète de ce type de
substitution :
 ${expression} où expression est l'expression qui définit la
chaîne de remplacement à utiliser.
 valeur par défaut pour le cas où cette variable ne contient rien
ou n'est pas définie: ${variable:-valeur}
 Exemple : :
• x="janvier"
• echo ${x:-rien}
• echo ${y:-rien}
• echo $y 27
Les substitutions
Remplacements de variables
 Fixer la valeur de la variable à cette valeur par défaut
même après la substitution: ${variable:=valeur}
 Exemple :
• x="janvier"
• echo ${x:=rien}
• echo $x
• echo ${y:=rien}
• echo $y

28
Les substitutions
Remplacements de variables
 Afficher un message d'erreur (stderr) lorsqu'une variable n'est
pas définie: ${variable:?message}
 Exemple :
• mois="janvier"
• echo ${mois:?je ne sais pas}
• echo ${jour:?je ne sais pas}
 Tester si une variable est non définie et renvoyer une valeur
spécifique si elle est définie: ${variable:+valeur}
 Exemple :
• nom="Karim"
• echo ${nom:+je te connais}
• echo ${nom2:+je te connais}

29
Les substitutions
Remplacements de variables
 Extraire une sous chaîne d’une chaîne: $
{variable:position:longueur}
 Exemple :
• tel="00212536607080"
• echo "ton numéro de téléphone est : 0$
{tel:5:9}"
 Obtenir la longueur d'une chaîne de caractères
contenue dans une variable: ${#variable}
 Exemple :
• prenom="karim"
• echo "Ton prénom est composé de $
{#prenom} caractères"
30
Les substitutions
Remplacements de variables
 Extraire la chaîne de caractères principale en enlevant
un préfixe: ${variable#préfixe} ou ${variable##préfixe}
 Exemple1 :

– v1="mercedes 250c"
– v2="mercedes 220s"
– v3="mercedes 190"
– echo "les voitures ${v1#mercedes} $
{v2#mercedes} ${v3#mercedes}
 Exemple2 : echo ${VAR#a*b}
 Extraire la chaîne de caractères principale en enlevant
un suffixe: ${variable%suffixe} ou ${variable%%suffixe}

31
Les substitutions
Substitution du résultat d'une commande
 Remplacer la commande appelante par son
résultat: $(commande)
 Exemple: x=$(date)
 `commande` : même résultat, mais avec
interprétation de $, ` et \.
 Exemple :

– echo "`echo \\a`" donne a


– echo "$(echo \\a)" donne \a

32
Les substitutions
Évaluation d'expressions arithmétiques
 $((expression)) : pour les entiers seulement.
 Opérations possibles: * - / ** >> << & | ^ ~ && ||

== <= >= < > != += -= *= …

33
Les expressions rationnelles

34
Les expressions rationnelles

N.B : pour l’utilisation des symboles ‘|’ et ‘ ?’
dans la commande grep doivent être précédés
par ‘\’ (grep ‘expr1 \| expr2’ …). Une autre
méthode consiste à ajouter l’option -E à la
commande grep.

35
Les expressions rationnelles

 Soit le fichier suivant :


– linux windows macos unix pc ordinateur
– serveur reseau swich routeur cable
– table chaise stylo
– amenagement
– aamjhfjsdhj
 grep 'l...x' tp.txt
 grep 'l[abcdefikl]' tp.txt

36
Les expressions rationnelles

 grep 'l[c-o]' tp.txt


 grep 'l[^abcdefikl]' tp.txt

 grep '^windows' tp.txt

 grep '^linux' tp.txt

 grep 'stylo$' tp.txt

 grep '^[ab]*m' tp.txt

37
Les expressions rationnelles
 Exemples:
 Soit le fichier phone2.txt suivant :
 Durand, Sophie 4-5471
 Bigard, Jean-Marie 8-7463
 Roumanoff, Anne 3-8456
 Satriani, Joe 7-1554
 Saintlazar, Rob 5-8451
 Vai, Steve 7-9547
 Maiden, Iron 9-6669
 grep $'\t5-...1' phone2.txt : Affiche les lignes dont
le numéro de téléphone commence par un 5 et se
termine par un 1 ($ pour activer l'interprétation
de \t). 38
Les expressions rationnelles
 $ grep '^S[^ ]* R' phone2.txt : Affiche les lignes dont
le nom de famille commence par un S et dont le
prénom commence par un R.
 $ grep '^[M-Z]' phone2.txt : Affiche les lignes dont le

nom de famille commence avec les lettres allant de


M à Z.
 $ grep '^[M-Z].*[12]$' phone2.txt : Affiche les lignes

dont le nom de famille commence avec les lettres


allant de M à Z et dont le numéro de téléphone se
termine soit par un 1 soit par un 2.

39
Les expressions rationnelles

 $ grep $',....\t' phone2.txt : Affiche les lignes dont le


prénom est composé de trois caractères.

40
Structures de contrôle
Les instructions composées
 Le shell permet de réaliser des instructions composées: bloc d’instructions.
 {
 cmd1
 cmd2
 …
 }
 Exemple:
 {
 cd /
 ls
 }
 Exécuter le bloc dans un autre shell (sans modifier l’environnent du shell
principal):
 (
 cmd1
 cmd2
 …
 )
41
Structures de contrôle
Les instructions composées
 command1 || command2: la commande
command2 n'est exécutée que si le code de
retour de la commande command1 est non nul
(si cette commande ne s'est pas exécutée
correctement).
 command1 && command2: la commande
command2 n'est exécutée que si la première
commande s'est exécutée correctement.

42
Structures de contrôle
Commande test
 Vérifie les types de fichiers et compare les
valeurs.
 Résultat dans la variable d’environnement $?
 $?=0  Vrai
 $?=1  Faux
 test val1 -eq val2 : test d’égalité.
 test val1 -lt val2 : plus petit que.
 test val1 -gt val2 : plus grand que.
 test val1 -ne val2 : différent de.
 test val1 -le val2 : plus petit au égal à.
 test val1 -ge val2 : plus grand ou égal à.
43
Structures de contrôle
Commande test
 test chaine1 = chaine2 : test d ’égalité.
 test chaine1 != chaine2 : test d ’égalité.
 test fichier1 -nt fichier2 : newer then.
 test fichier1 -ot fichier2 : older then.
 test -e nom : test d’existence du
fichier/répertoire.
 Test -f fichier : tester si le fichier est existant et
régulier.
 Exemple : test -f exo2.txt || touch exo2.txt
44
Structures de contrôle
Les tests
 Valeur de retour=0  programme exécuté correctement.
 Tester le code de retour d'une commande:
 if commande
 then
 Action
 Fi
 [ : C’est la même commande test qui permet de réaliser divers types de tests sur les
paramètres qu'on passe.
 Exemple: Comparaison selon l’ordre lexicologique
 if [ $variable == valeur ]
 then
 Action
 else
 action2
 fi
 Exemple: comparaison des entiers (en valeur absolue)
 if [ $i -gt 3 ]
 then
 echo "$i est supérieur à 3"
 fi

45
Structures de contrôle
Les tests
 Manipulation des fichiers:
 if [ option fichier ]
 then

…

 fi

46
Structures de contrôle
Les tests
Option Signification
-e Test d'existence d'un fichier ou d'un répertoire.
-d Test d'existence d'un répertoire.
-f Test d'existence d'un fichier normal.
-s Test d'existence d'un fichier et vérification que sa taille est non nulle.
-L Test d'existence d'un lien symbolique.
Test d'existence d'un fichier spécial de périphérique de type bloc (disque dur, CD-ROM, lecteur de
-b
cassettes, etc.).
Test d'existence d'un fichier spécial de périphérique de type caractère (port série, port parallèle, carte
-c
son...).
-p Test d'existence d'un tube.
-r Test d'existence du fichier et d'accessibilité en lecture de ce fichier.
-w Test d'existence du fichier et d'accessibilité en écriture de ce fichier
-x Test d'existence du fichier et de possibilité d'exécution de ce fichier.
-g Test d'existence du fichier et de présence du bit setgid sur ce fichier.
-u Test d'existence du fichier et de présence du bit setuid sur ce fichier
-k Test d'existence du fichier et de présence du bit sticky sur ce fichier.
-O Test d'existence du fichier et d'appartenance de ce fichier à l'utilisateur effectif courant.
-G Test d'existence du fichier et d'appartenance de ce fichier au groupe effectif courant.
-N Test d'existence du fichier et de modification de ce fichier depuis la dernière fois qu'il a été lu. 47
Structures de contrôle
Le branchement conditionnel
 case valeur in
 ( motif1 | motif2 | ... ) commande1 ;;
 ( motifn | motifn+1 | ... ) commande2 ;;
 . . .
 esac
 Les motifs représentent les valeurs possibles pour
valeur.
 Exemple: afficher la nature du fichier dont le nom est
stocké dans la variable i à partir de son extension.
 case $i in
 ( *.txt ) echo "$i est un fichier texte" ;;
 ( *.gz ) echo "$i est compressé avec gzip" ;;
 ( *.tar ) echo "$i est une archive" ;;
 esac
48
Structures de contrôle
Les boucles
 while commande
 do
 action
 done
 Tant que la commande commande renvoie un
code de retour égal à 0, l'instruction action est
exécutée.
 until commande
 do
 action
 done
 l'instruction action est exécutée tant que la
commande commande renvoie un code de 49
retour non nul.
Structures de contrôle
Exemple
 Calculer la somme des dix premiers entiers :
 result=0
 i=0
 while [ $i -le 10 ]
 do
 result=$(($result + $i))
 i=$(($i + 1))
 done
 echo $result

50
Structures de contrôle
Les itérations
 for variable in ensemble
 do
 action

 done
 Exemple:
 for i in Maroc Algerie Tunisie Egypte Libye
 do

 echo $i
 done

51
Structures de contrôle
Les itérations

Exemple:
– for i in *.txt
– do
 echo "supprimer $i ?"

 read r

 If [ $r = "oui" ]

 Then

– rm $i
 fi

– done
52
Structures de contrôle
Les itérations
 Syntaxe comme du langage C:
 for ((initialisation de VAR; contrôle de VAR;
modification de VAR))
 do

 actions
 done

 Exemple:
 for ((i = 10; i >= 0; i -= 1))

 do

 echo $i

 done 53
Structures de contrôle
Exemple
 Créer 10000 fichiers :
 for ((i=1;i<=10000;i++))
 do

 touch fichier$i.txt

 done

54
Structures de contrôle
Exemple
 Remplacer l’extension .txt de tous les fichiers
par .doc:
 for x in *.txt
 do

 mv $x ${x%.txt}.doc

 done

55
Structures de contrôle
Les fonctions
 function nom () {
 Instructions
 }
 Les paramètres de la fonction sont passé
implicitement dans les variables $1, $2, $3, …
 Les variables déclarées à l’intérieur de la
fonction sont globales.
 Déclarer une variable locale: local var=val
 Retourner par: return valeur. La valeur est
enregistrée dans la variable $?
 Appel: nom_f arg1 arg2 ...
56
Structures de contrôle
Les entrées/sorties
 Affichage vers le flux de sortie standard: echo

 Lecture à partir du flux d’entrée standard:
 read var1 var2 var3 …
 Les valeurs lues sont affectées successivement aux

variables var1, var2, …


 read toute seule: La valeur se trouve dans la

variable REPLY.

57
Les alias

 L'alias sert à remplacer une commande


complexe par un mot simple.
 alias nom='chaîne'

 Exemple: alias ista='echo "tri ista"'

 Afficher les alias: alias

 Supprimer un alias: unalias nom_alias

58
FIN

59

Vous aimerez peut-être aussi