Systeme D'exploitation - V2
Systeme D'exploitation - V2
D’EXPLOITATION
UNIX
NOREDDINE ABGHOUR
[email protected]
2014-2015
https://app.box.com/s/m352tbep3hvswpifyfyv
SOMMAIRE
Généralités
Les commandes de base
Le SHELL
Les filtres UNIX
Gestion des signaux
La programmation SHELL
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Linux: Généralité
Propriétés
multi-tâches
multi-utilisateurs
portable
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Structure d'Unix
Kernel
Shell
Applications
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Structure d'Unix
Kernel (noyau) :
gestion du système de fichier, du processeur, de
la mémoire centrale et des périphériques
Applications :
Rm, mv, star office, netscape, etc…
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Arborescence UNIX
les fichiers sont organisés sous forme d’arborescence de
répertoires et de fichiers.
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Arborescence UNIX
les fichiers sont organisés sous forme d’arborescence de
répertoires et de fichiers.
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Arborescence UNIX
les fichiers sont organisés sous forme d’arborescence de
répertoires et de fichiers.
Chaque répertoire contient un lien vers :
lui-même : désigné par un point .
son père : désigné par deux points ..
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Arborescence UNIX
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Exemple d’arborescence UNIX
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Exemple d’arborescence UNIX
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Exemple d’arborescence UNIX
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Manuel des commandes
La liste des commandes n’est pas exhaustive, seules les plus courantes
et les plus adaptées à votre enseignement sont présentées.
De la même façon, seules les options les plus courantes seront indiquées
pour chaque commande.
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Commandes liées à
l’arborescence des fichiers
Déplacement dans l’arborescence
Syntaxe pwd
Afficher le chemin absolu du répertoire de travail en cours
Description (répertoire courant).
Options
principales
Syntaxe Cd
La commande interne cd permet de changer de répertoire
Description
courant
Options
principales
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Exemple : cd, pwd
$ pwd
/home/etu/toto
$ cd projets/gl
$ pwd
/home/etu/toto/projets/gl
$ cd ..
$ pwd
/home/etu/toto/projets
$ cd ../../../etu/toto
$ pwd
/home/etu/toto
$ cd /usr/bin
$ pwd
/usr/bin
$ cd /.././../home/./etu/./..
$ pwd
/home
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Visualisation de l’arboresence : ls
Syntaxe ls [options] [fichiers…]
$ ls -ail
Les droits
Propriétaire Le nom du
la taille du
fichier
fichier
numéro nombre de
liens physique Groupe du La date de dernière
d’inode
sur le fichier propriétaire modification du fichier
Le type du
fichier N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Types et modes d’accès au fichier
Type :
u : user (utilisateur)
- fichier ordinaire
g : group
d répertoire
o : other (autre)
b type bloc
c type caractère r : read (lecture)
l lien symbolique w : write (écriture)
s socket x : execute (exécution)
p pipe
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Caractère spéciaux pour le shell
$ ls *
achat bateau chat chateau cheval chien gateau rateau
$ ls ?ateau
bateau gateau rateau
$ ls *ateau
bateau chateau gateau rateau
$ ls [gr]ate*
gateau rateau
$ ls [^br]ateau
gateau
$ ls [a-c]*
achat bateau chat chateau cheval chien
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
La commande : cat
Syntaxe cat [options] [files]
Concatène des fichiers et les affiche sur la sortie standard.
Description Cat envoie simplement le contenu d’un fichier (ou
plusieurs fichiers) vers la sortie standard
-s N’affiche pas plus qu’une seule ligne blanche.
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Manipulation des noms de fichiers : basename, dirname
$ basename /usr/local/bin/lynx
lynx
$
$ dirname /usr/local/bin/lynx
/usr/local/bin
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Changement des droits d’accés: chmod
Syntaxe chmod [options] mode fichier...
chmod modifie les permissions d'accès de chacun des
fichiers indiqués, en suivant l'indication de mode, qui peut
être une représentation symbolique du changement à
effectuer, ou un nombre octal représentant le motif binaire
des nouvelles autorisations.
Description Le format symbolique des changements de mode est
`[ugoa...][[+-=][rwxXstugo...]...][,...]'.
Plusieurs opérations symboliques peuvent être séparées
par des virgules.
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Changement des droits d’accés : chmod
ugo
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Changement des attributs d’un fichier : chown, chgrp, touch
touch fichier
Modifier l’horodatage d’un fichier
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Droits d’accès par défaut lors de création d’objets : umask
Options
-S Affiche le masque en notation symbolique
principales
$ umask
022
$ls –l
-rw-r--r-- 2 nabghour fsac 231 2006-01-24 21:25 toto
$ umask 026
$ touch file
$ ls –l file
-rw-r----- 2 nabghour fsac 231 2006-01-24 21:25 file
$ mkdir rep
$ ls –l
drwxr-x--x 2 nabghour fsac 231 2006-01-24 21:25 rep
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Création et suppression de répertoire : mkdir, rmdir
Options
-p Créer les répertoires parents s'ils manquent.
principales
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Exemple : mkdir, rmdir
$ ls -al
Total12
drwxr-xr-x 2 nabghour fsac 512 08 fév 13:15 .
drwxr-xr-x 37 nabghour fsac 512 08 fév 13:04 ..
-rw-r--r-- 1 nabghour fsac 642 15 jan 11:42 fichier
-rw-r--r-- 1 nabghour fsac 362 25 jan 11:36 fichier2
$ mkdir monrep
$ ls –al
total14
drwxr-xr-x 3 nabghour fsac 512 08 fév 03:15 .
drwxr-xr-x 37 nabghour fsac 512 08 fév 13:04 ..
-rw-r--r-- 1 nabghour fsac 642 15 jan 11:42 fichier
-rw-r--r-- 1 nabghour fsac 362 25 jan 11:36 fichier2
drwxr-xr-x 2 nabghour fsac 512 08 fév 13:15 monrep
$ cd monrep
$ ls –al
Total 4
drwxr-xr-x 2 nabghour fsac 512 08 fév 03:15 .
drwxr-xr-x 37 nabghour fsac 512 08 fév 13:15 ..
$ cd ..
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Exemple : mkdir, rmdir
$ ls -al
Total14
drwxr-xr-x 3 nabghour fsac 512 08 fév 03:15 .
drwxr-xr-x 37 nabghour fsac 512 08 fév 13:04 ..
-rw-r--r-- 1 nabghour fsac 642 15 jan 11:42 fichier
-rw-r--r-- 1 nabghour fsac 362 25 jan 11:36 fichier2
drwxr-xr-x 2 nabghour fsac 512 08 fév 13:15 monrep
$ rmdir monrep
$ ls -al
Total12
drwxr-xr-x 2 nabghour fsac 512 08 fév 03:15 .
drwxr-xr-x 37 nabghour fsac 512 08 fév 13:04 ..
-rw-r--r-- 1 nabghour fsac 642 15 jan 11:42 fichier
-rw-r--r-- 1 nabghour fsac 362 25 jan 11:36 fichier2
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Création de liens : ln
Syntaxe ln [options] source [dest]
Création de lien entre fichiers.
Lorsqu’on crée un lien physique de source vers dest,
dest pointe vers le même inode que source.
- Si source est effacé, l’inode continue à exister et il est
encore accessible au moins par dest.
Description Lorsqu’on crée un lien symbolique de source vers dest,
dest référence source.
Si source est supprimé, dest référencera un fichier qui
n’existe plus
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Création de liens physique : ln
$ ls -il
Total 4
65329 -rw-r--r--1 nabghour fsac 14 8 fév 13:22 source
65350 -rw-r--r--1 nabghour fsac 36 25 jan 11:36 fichier2
$ cat source
Bonjour
Au revoir
$ ln source dest
$ ls -il
Total6
65329 -rw-r--r– 2 nabghour fsac 14 8 fév 13:22 source
65350 -rw-r--r– 1 nabghour fsac 36 25 jan 11:36 fichier2
65329 -rw-r--r– 2 nabghour fsac 14 8 fév 13:22 dest
$ cat dest
Bonjour
Au revoir
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Création de liens physique : ln
$ rm source
$ ls –il
Total 4
65350 -rw-r--r--1 nabghour fsac 36 25 jan 11:36 fichier2
65329 -rw-r--r--1 nabghour fsac 14 8 fév 13:22 dest
$ cat dest
Bonjour
Au revoir
$ ln dest fichier4
$ ls -il
Total6
65350 -rw-r--r– 1 nabghour fsac 36 25 jan 11:36 fichier2
65329 -rw-r--r– 2 nabghour fsac 14 8 fév 13:22 dest
65329 -rw-r--r– 2 nabghour fsac 14 8 fév 13:22 fichier4
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Création de liens symbolique : ln -s
$ ls -il
Total 6
65350 -rw-r--r– 1 nabghour fsac 36 25 jan 11:36 fichier2
65329 -rw-r--r– 2 nabghour fsac 14 8 fév 13:22 dest
65329 -rw-r--r– 2 nabghour fsac 14 8 fév 13:22 fichier4
$ ln -s fichier4 fichier5
$ ls -il
total 6
65350 -rw-r--r-- 1 nabghour fsac 36 25 jan 11 :36 fichier2
65329 -rw-r--r-- 2 nabghour fsac 24 8 fév 13 :24 dest
65329 -rw-r--r-- 2 nabghour fsac 24 8 fév 13 :24 fichier4
65378 lrwxr-xr-x 1 nabghour fsac 8 8 fév 13 :24 fichier5 fichier4
$ cat fichier4
Bonjour
Au revoir
$ cat fichier5
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Création de liens symbolique : ln -s
$ cat fichier5
Bonjour
AU revoir
$ rm fichier4
$ ls -il
Total 4
65350 -rw-r--r-- 1 nabghour fsac 36 25 jan 11 :36 fichier2
65329 -rw-r--r-- 1 nabghour fsac 24 8 fév 13 :24 dest
65378 lrwxr-xr-x 1 nabghour fsac 8 8 fév 13 :24 fichier5 fichier4
$ cat fichier5
cat :fichier5 :No such file or directory
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Déplacement ou renommage des fichiers : mv
Syntaxe mv [options…] source cible
Déplacement ou renommage des fichiers ou répertoire
En réalité, la commande mv n’effectue pas de copie de
Description données physique mais modifie le nom et transfère les
informations d’un répertoire à l’autre.
$ ls -i
65338 source 65340 fichier2
$ mv source dest
$ ls -i
65340 fichier2 65338 dest
$ mv dest ..
$ ls -i ../dest
65338 ../dest
$
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Copie de fichiers : cp
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Exemple : cp
$ ls -il
total 0
65338 -rw-r--r-- 1 nabghour fsac 0 20 fév 17 :58 fichier3
$ cp fichier3 fichier4
$ ls -il
total 0
65338 -rw-r--r-- 1 nabghour fsac 0 20 fév 17 :58 fichier3
65341 -rw-r--r-- 1 nabghour fsac 0 20 fév 18 :01 fichier4
$ cp -r SousRep1 Rep1
$ ls -R Rep1
fichier3 SousRep1
$
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Suppression de fichiers : rm
Syntaxe rm [options] fichier…
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Recherche de fichiers : find
find [dirs] expr [command]
-perm +/- mode : fichier dont les autorisations d’accès sont fixées exactement au mode
indiqué
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Recherche de fichiers : find
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Recherche de fichiers : find
Exemple 3 :chercher les liens symboliques qui se nomment local dans /usr
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Recherche de fichiers : find
Exemple 7 :chercher les répertoire qui ne sont pas accessible dans /usr
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Caractère spéciaux du Shell
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Métacaractères : Quotation
’ " ` \ changent la façon dont le Shell interprète les
caractères spéciaux
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Exemple : Quotation
$ ls
chat chien poisson
$ whoami
newbie
$ var=newbie-user
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Flux
1: écran
0: clavier
PROCESSUS 2: écran
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Métacaractères de redirection
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Redirection de la sortie standard
cmd > fic : $ echo "Le Corbeau et le Renard" > file1
redirige la sortie de la
commande dans le $ cat file1
fichier qui est créé s’il Le Corbeau et le Renard
n’existait pas et dont le
contenu est écrasé $ echo "Maitre Corbeau, Sur un arbre
sinon. perché," >> file1
$ cat file1
Le Corbeau et le Renard Maitre Corbeau,
cmd >> fic : Sur un arbre perché,
redirige la sortie de la
commande à la suite du $ echo "La Cigale et la Fourmi" > file1
contenu du fichier (qui
doit exister). $ cat file1
La Cigale et la Fourmi
$
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Redirection de la sortie d’erreur
cmd 2 > fic : $ ls abc file1 file2
redirige la sortie ls : abc : No such file or directory
d’erreur de la file1 file2
commande dans le
fichier qui est créé s’il $ ls abc file1 file2 > f1
n’existait pas et dont le ls : abc : No such file or directory
contenu est écrasé
sinon.
$ cat f1
file1 file2
$ cat f2
ls : abc : No such file or directory
$
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Redirection de l’entrée standard
cmd < fic : $ wc < file1
1 5 23
l’entrée de la commande
provient du fichier
$ wc << EOF
> Maître Corbeau, Sur un
arbre perché,
> Tenait dans son bec un
fromage,
cmd << etq : > Maitre Renard, par l’odeur
l’entrée de la commande alléché,
provient des lignes de > Lui tint à peu près ce
commandes suivantes langage :
jusqu’à la ligne ne > EOF
contenant que l’étiquette 4 25 138
$
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Tube (Pipe) entre flux d’entrée et flux de sortie
cmd 1 | cmd 2
redirige la sortie de la
commande1 vers l’entrée de
la commande 2
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Redirection vers un descripteur
cmd > & desc $ cat resultat
redirige la sortie de la ls : abc : No such file or
commande vers le directory
descripteur donné (0 :entrée file1
std, 1 : sortie std, 2 : erreur file2
std)
$ ls fic1 fic2 abc 2>
resultat >&2
$ ls file1 file2 abc >
resultat 2> resultat $ cat resultat
ls : abc : No such file or
$ cat resultat directory
file1 file1
file2
file2
$
o such file or directory
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
EXERCICES
Que font les commandes suivantes :
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Expression régulières étendues
Expressions régulières par ligne
. : (dot)un caractère quelconque
*, + , ? : opérateurs de répétition
[x y z] : x ou y ou z
[A-G] : intervalle
[^xyz] : sauf x, y ou z
^ : début de ligne
$ : fin de ligne
\{m,n\} :répétions entre m et n fois
\ : échappement
| : operateur d’alternation
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Exemples
^$ : représente une ligne vide
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Recherche de motifs dans un fichier: grep
grep [-ivn] regexpr fichier...
Afficher les lignes correspondant à un motif donné
-v : les lignes complémentaires
-i : sans tenir compte de la casse (majuscule=minuscule)
-n : en précédant les lignes sélectionnées par leur numéro de ligne
-G : Interprète le motif comme une expression régulière simple
-F : Interprète le motif comme une expression régulière étendue
-l : n’affiche que le nom du fichier
$ more file
il fait beau
il fait chaud
beau temps n’est ce pas ?
$ grep "ˆil" file
il fait beau
il fait chaud
$ cat file | grep –v "ˆil"
beau temps n’est ce pas ?
$
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Filtre linux : tr
Syntaxe tr [options] [string1 [string2]]
Convertit les caractères de string1 par les caractères
correspondant dans string2. tr ne prend pas en argument un
fichier. Noter que string1 et string2 doivent contenir le même nbre
Description de caractères. Le premier caractère ds string1 va être remplacer
par le premier caractère dans string2 et ainsi de suite. string1 ou
string2 peuvent contenir plusieurs types de caractères spéciaux :
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Filtre : uniq
Syntaxe uniq [options] [input [output]]
Affiche l’entrée standard sur la sortie standard, en
éliminant les lignes dupliquées adjacentes. uniq traite
Description
seulement les lignes adjacentes, elle est utilisée en
conjonction avec sort
-d Affiche les lignes dupliquées
Options
principales -u Affiche les lignes uniques
$cat file $uniq file $sort file | uniq $sort file | uniq -d
b b a a
b a b b
a c c c
a d d
c c
d
c
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Filtre : cut
Syntaxe cut options [files]
Affiche les colonnes d’un fichier ou les champs d’une ligne.
Description Par default, les champs sont séparés par des caractères
blancs
Affiche la liste des octets désignés par leur
-blist
positions.
Affiche la liste des caractères désignés par
Options -clist
leur positions.
principales
-flist Affiche la liste des champs
Définit delim comme séparateur entre les
-ddelim
champs.
$ cat fichier $ cat fichier | cut -d : -f1,2
0 :Casablanca:maroc:022 0 :Casablanca
1 :Rabat :maroc :037 1 :Rabat
2 :Fes :maroc :035 2 :Fes
3 :Marrakech :maroc :024 3 :Marrakech
$ $
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Filtre : sort
Syntaxe sort [options] [files]
-f Ignore la casse.
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Filtre : sort
$ cat file1 $sort –t: -k4 file
3:casablanca:maroc:123 0:rome:Italie:040
1:paris:France:420 2:madrid:espagne:103
0:rome:Italie:040 3:casablanca:maroc:123
2:madrid:espagne:103 1:paris:France:420
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Filtre : paste
Syntaxe paste [options] [files]
affiche des lignes regroupant les lignes correspondantes
Description de chaque fichier, séparées par des Tabulations, et
terminées par un Saut de Ligne.
Utiliser successivement les caractères de la
-dn liste_de_délimiteurs plutôt que les Tabulations
Options pour séparer les lignes regroupées.
principales -s Regrouper toutes les lignes d'un seul fichier à
la fois, plutôt qu'une ligne de chaque fichier
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Filtre : cat
Syntaxe cat options [files]
Concatène des fichiers et les affiche sur la sortie standard.
Description Cat envoie simplement le contenu d’un fichier (ou
plusieurs fichiers) vers la sortie standard
-s N’affiche pas plus qu’une seule ligne blanche.
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Filtre : wc
Syntaxe wc [options] files
Affiche le nombre de lignes de caractères et de mots dans
Description
1 ou plusieurs fichiers.
-c Affiche le nbre de caractères seulement.
Options
principales -l Affiche le nbre de lignes seulement.
$wc file[123]
$wc -l file1
$wc -w file2
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Filtre :expand
Syntaxe expand [options] [files]
Convertit les tabulations en espaces : cette commande
Description élimine les tabulations et les remplace par le nombre
d’espace correspondants.
Spécifie le nombre d’espace
-tnumber
Options représentant une Tab par défaut c’est 8.
principales Convertit les tabulations seulement au
-i initial
début des lignes
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Filtre : fmt
Syntaxe fmt [options] [files]
Formate le texte à la largeur spécifiée by filling lines et en
Description supprimant les retours à la ligne. Les fichiers donnés sur la
ligne de commande seront concaténés
Use uniform spacing: one space between
-u
Options words and two spaces between sentences.
principales width Set line width to width. The default is
-w
75 characters.
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Filtre : head
Syntaxe head [options] [files]
Affiche par défaut les dix premières lignes d’un fichier (ou
Description plusieurs fichier). Lorsque plusieurs fichiers sont spécifiés,
une entête est affichée au début de chaque fichier
Affiche les n premiers octets, ou si n est
-c n précédée par k ou m, affiche les n premiers
Options
kilobytes ou megabytes, respectivement.
principales
Affiche les n premières lignes. Par défaut c’est
-nn
10 lignes.
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Gestion des signaux : trap, kill
Il est possible de faire intercepter des signaux par le shell. Ces signaux
sont générés par des évènements lancés par l’utilisateur lors de
l’exécution du shell, par exemple :
1 : coupure de ligne
2 : arrêt (CTRL+C)
9 : destruction (NON INTERCEPTABLE)
15 : fin de process
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Gestion des signaux
Les commandes
top:
$ top
bg :
$ bg
fg :
$ fg
jobs :
$ jobs
ps :
$ ps
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Programmation SHELL
INTRODUCTION
Un script Shell est un ensemble de commandes dans un fichier ayant
éventuellement des paramètres
Les paramètres d’un script Shell sont repérés par leur position quand on
exécute le script
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Rôle d’un script shell
Son utilité :
boucles
Tests
...
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Comment créer un script Shell
4. Exécuter le script
$./nom_script_shell
$ nom_script_shell
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Exemple : Structure d’un script shell
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Passage de paramètres à un Shell Script : exemple 1
$ cat script2.sh
# !/bin/sh
# Mon programme qui affiche les paramètres de la ligne de
# commande
echo "* Le nom du programme est : $0"
echo "* Le troisième paramètre est : $3"
echo "* Le nombre de paramètre est : $#"
echo "* Tous les paramètres (mots individuels) : $*"
echo "* Tous les paramètres : $@"
exit 0
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Passage de paramètres à un Shell Script : exemple 2
$ cat script3.sh
#!/bin/sh
echo "Nombre de parametres = " $#
echo "Paramètre numéro 0 = " $0
echo "Paramètre numéro 1 (nom du répertoire) = " $1
echo
echo "No du processus en cours ($0) = $$"
mozilla &
echo "No du dernier processus en background (mozilla)= $!"
echo
date
echo "Nombre de fichiers dans le repertoire $1 =";ls $1| wc -w
$ ./script3.sh /etc
Nombre de parametres = 1
Paramètre numéro 0 = ./script3.sh
Paramètre numéro 1 (nom du répertoire) = /etc
. . . . . . .
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Passage de paramètres à un Shell Script : exemple 3
$ cat script3.sh
#!/bin/sh
ls
echo "exemple code de retour OK (ls)= $? "
ls toto
echo "exemple code de retour KO = $? "
$ ls
chat chien
$ ./script3.sh
chat chien
exemple code de retour OK (ls)= 0
toto : no sush file or directory
exemple code de retour KO = 1
$
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Passage de paramètres à un Shell Script: précaution
$ cat ./script4_v1.sh
# !/bin/sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12
exit 0
$ cat script4_v2.sh
# !/bin/sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} exit 0
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Décalage de paramètres : shift n
$ cat script5.sh
# !/bin/sh
echo "$# : arg1 = $1 , arg2 = $2 ; total : $@"
shift
echo "$# : arg1 = $1 , arg2 = $2 ; total : $@"
shift
echo "$# : arg1 = $1 , arg2 = $2 ; total : $@"
shift
echo "$# : arg1 = $1 , arg2 = $2 ; total : $@"
shift
exit 0
$ ./script5.sh un deux
2 : arg1 = un , arg2 = deux ; total : un deux
1 : arg1 = deux , arg2 =; total : deux
0 : arg1 = , arg2 = ; total :
shift : can’t shift that many
$
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Remarque sur shift
A chaque emploi de shift,
le paramètre $1 précédent est perdu,
$1 est supprimé de $* et $@,
$# est décrémenté de 1.
for i in $*
for i in $*
⇔
do
do
echo $1
echo $i
shift
done
done
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Lecture interactive : read
read variable
La commande interne read attend une entrée de l’utilisateur et l’affecte à la variable
Spécifiée.
$ cat test_read
#!/bin/sh
echo ’Quel est ton nom ?’
read nom
echo "Bonjour $nom"
exit 0
$ ./test_read
Quel est ton nom?
Toto
Bonjour Toto
$
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
calculs numériques : expr
expr chaine
évalue la chaîne de caractère représentant des opérations.
$ cat calcul.sh
#!/bin/sh
C="abc"
N=12
echo "variable C = " ${C}
echo "variable N = " ${N}
echo –e "variable N+1 = \c" ; expr ${N} + 1
N=‘expr ${N} + 10‘
echo "variable N apres N=N+10= " ${N}
$ ./calcul.sh
variable C = abc
variable N = 12
variable N+1 = 13
variable N apres N=N+10= 22
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Calcul numérique : $( (expr-arthmq) | cmde )
$((expr-arthmq )) et $(cmde)
Exemple :
$ V=10
$ X=20
$ echo $(($V+$X))
30
$ echo $(($X*$V))
200
$ echo $(date)
24/09/2010
$
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Commande : eval
eval commande
La commande est interprétée puis le résultat de l’interprétation est exécuté
$ cat test_eval
#!/bin/sh
v=date
date=02/10/2013
eval ‘’$v’’
eval ‘’$$v’’
eval ‘’echo \$$v ’’
$ ./test_eval
24/09/2010
2078v : commande introuvable
02/10/2013
$
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Commandes de test : test, [
test expression ou [ expression ]
permet d’évaluer une expression.
• Si vrai, renvoie 0, sinon, renvoie 1.
• S’il n’y a pas d’expression, renvoie 1 (false).
test expression est équivalent à [ expression ]
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Commandes de test : test, [
test expression ou [ expression ]
$ ls -l
-rwx r--x r-x toto fsac … chat $ [ 3 -lt 42 -a -x chat ]
$ test -f chat $ echo $?
$ echo $? 0
0 $ [ 3 -gt 42 -a -x chat ]
$ test -f chien $ echo $?
$ echo $? 1
1 $
$
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Commande : exec
exec [commande [arg … ]]
La commande exec exécute commande à la place du processus (shell)
courant:
• pas de création de nouveau processus
• arg, . . . deviennent les arguments de commande
• si commande n’existe pas, le shell termine avec un code de retour
non nul (127, par exemple).
Seuls les descripteurs de fichiers 0, 1 et 2 sont transmis à la commande.
Sans argument, les redirections imposées à exec sont permanentes et
appliquées au shell courant.
$ cat test_exec $ sh
#!/bin/sh $ exec 1> /tmp/out
echo bonjour $ date
exec date $ echo bonjour
echo ligne 1 $ exit
echo ligne 2 $cat /tmp/out
$ test_exec 24-09-2010
bonjour bonjour
24-09-2010 $
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Branchement conditionnel : if-then-elif-else-fi
if liste-commandes-1
then liste-commandes-2
elif liste-commandes-3 < −−−−− autant de fois que nécessaire
else liste-commandes-4 < − − − − − si nécessaire
fi
#!/bin/sh
if commande [options] parametres > resultats.txt 2> erreurs.txt
then
# code de retour (exit) valant 0
bloc-1-de-commandes-unix
else
# code de retour (exit) différent de 0
bloc-2-de-commandes-unix
fi
Exemple 1 :
if [ -d toto ];
then echo "toto est un répertoire"
elif [ -h toto ];
then echo "toto est un lien symbolique"
else echo "faut pousser l’investigation plus loin"
fi
Exemple 2 :
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Branchement conditionnel : case-esac
case expression in
motif1 ) liste-commandes ;; < − autant de fois
...
* ) liste-commandes ;;
esac
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Exemple avec case-esac
$ cat question
case $1 in
[Yy][eE][sS] | [oO][uU][iI ] | OK) echo "Tu approuves" ; ;
[Nn][oO]) echo "Tu désapprouves" ; ;
bof ) echo " décides toi" ; ;
pfff*) echo "Pas la peine de répondre" ; ;
*) echo "réponse idiote" ; ;
esac
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Exemple avec for-do-done
$ ./test_for1 $ ./test_for2
chapitre un /etc/fbtab
chapitre deux /etc/fstab
chapitre trois /etc/ftpusers
chapitre quatre
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Boucle while-do-done
while liste-commandes-1
do
liste-commandes-2
done
La valeur testée par la commande while est l’état de sortie de la dernière commande
de liste-commandes-1.
Si l’état de sortie est 0, alors le shell exécute liste-commandes-2
puis recommence la boucle.
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Exemple avec while-do-done
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Boucle until-do-done
until liste-commandes-1
do
liste-commandes-2
done
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Exemple avec until-do-done
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Contrôle du flux d’exécution : break, continue
break ou break n
permet de sortir d’une boucle for, while ou until.
Si n est précisé, il indique le nombre d’imbrication concernée par le break.
continue n
permet de passer à l’itération suivante d’une boucle for, while ou until.
Si n est précisé, il indique le nombre d’imbrication concernée par le continue.
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Exemple : break, continue
$ cat test_continue
#!/bin/sh
for i in 1 2 3 4
do
for j in 1 2 3 4 5
do
if [ $j –eq 2 ]
then
continue 2
else
echo "[$i,$j]"
fi
done
done
$./test_continue
[1,1]
[2,1]
[3,1]
[4,1] N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Déboguage d’un script shell : set -x
Placer en début de script la ligne suivante :
set -x
Exemple:
$ cat test_set-x
#!/bin/sh
set –x
w=“a = b”
echo $w
v=stop
if [ $v!=$w ] then echo ok
else
echo ko
fi
$ ./test_set-x
+echo a = b
a = b
+if [ $v!=$w ] then echo ok fi
if [ stop!=a = b ] then echo ok …
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Listes de commandes
Une séquence de commande s’écrira :
commande1 ; commande 2 ;...
commande1
commande2
...
Cmde1&&cmde2
Cmde1||cmde2
{ liste cmde; }
( liste cmde )
Attention, chaque nouvelle commande (non interne) est exécutée dans un nouveau
processus.
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Fonction
On peut regrouper les commandes au sein d’une fonction.
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX
Code de retour : return, exit
return n
Renvoie une valeur de retour pour la fonction shell.
exit n
Provoque l’arrêt du shell courant avec un code retour de n sicelui-ci est
spécifié. S’il n’est pas spécifié, il s’agira de la valeur deretour de la dernière
commande exécutée.
N.ABGHOUR
SYSTEME D'EXPLOITATION : UNIX