Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Bash
1
Introduction
Le shell est l'environnement utilisateur en
mode texte sous Linux.
C'est le programme qui se charge de lire et
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
&
Le premier nombre, entre crochets, est le
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
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 ») à
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
9
Redirections
Rediriger la sortie standard
Rediriger la sortie vers un fichier en utilisant le
signe >
Exemple: ls>resultat_ls
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
Concaténation: 2>>
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
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
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>
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
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
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 :
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
36
Les expressions rationnelles
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
39
Les expressions rationnelles
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
variable REPLY.
57
Les alias
58
FIN
59