Académique Documents
Professionnel Documents
Culture Documents
Page 2
Il existe plusieurs types de shell
Bourne shell (sh)
Bash (Bourne Again SHell : bash)
Korn Shell (kornell university ksh)
Tcsh (Terminal C shell : csh)
COMMAND.EXE (MS-DOS), CMD.EXE (Windows)
Sous Windows : PowerShell (à partir 2008)
Page 3
Il s’agit d’une interface texte entre l’utilisateur et le système
Tout se fait au clavier
Pas de clic de souris
L’utilisateur tape des commandes qui sont exécutées par le
système
Le shell est donc un « interpréteur de commandes »
Chaque commande a une syntaxe particulière
Il existe des milliers de commandes différentes
Les commandes peuvent aussi provenir d’un fichier
Le fichier contient les commandes à exécuter
L’utilisateur appel le fichier plutôt que de taper toutes les commandes
• Utile pour les tâches répétitives
Le shell reste le moyen le plus efficace pour contrôler le système
C’est aussi le plus utilisé sous Linux/Unix
Page 4
Le shell est un véritable environnement de programmation
Variables, boucles, structures de contrôle « if »
Programmes
Les programmes écrits pour le shell sont interprétés au moment
de l’exécution
Aucune compilation préalable n’est utile
Les performances n’égalent pas un programme en C
Les programmes écrits pour le shell sont des « scripts » :
Page 5
Commandes et ligne de commandes
Page 6
Le shell affiche qu’il est prêt à exécuter une commande par un
prompt prenant cette forme:
Utilisateur Répertoire
courant courant
root@foulen:/home/moi# |
Nom de la # : Superutilisateur
machine $ : Utilisateur normal
Page 8
Chaque commande dispose d’entrées/sorties :
Comme l’écran (sortie) ou le clavier (entrée)
3 types différents:
L’entrée standard définie par le symbole « stdin » et le descripteur 0
• Provenant du clavier par défaut
La sortie standard « stdout » et le descripteur 1
• Dirigée vers l’écran par défaut
La sortie d’erreurs « stderr » et le descripteur 2
• Egalement redirigée vers l’écran par défaut
Possibilité de modifier le comportement par défaut
En utilisant les redirections d’entrées/sorties
stdout
stdin Commande
stderr Fichier log
Page 9
Chaque commande a une syntaxe particulière
Elle est composée d’options et de paramètres
Les paramètres permettent de fournir les données nécessaires à
l’exécution de la commande
• Ils sont souvent obligatoires
Les options permettent d’offrir des fonctionnalités supplémentaires
qui s’adaptent à des besoins spécifiques
• Exemple : Commande « ls -a » qui liste aussi les fichiers cachés
Exemples de syntaxe (SYNOPSIS de la commande « cp »)
cp [OPTION]... SOURCE... DIRECTORY
Page 10
« ls » liste les fichiers d’un répertoire donné
SYNOPSIS :
ls [OPTION]... [FILE]...
Page 11
Manuel des commandes
Page 12
La commande « man » (Manual) permet d’obtenir de l’aide sur la
syntaxe d’une commande
Très souvent en Anglais et rarement en français
L’aide est en générale très complète
• Parfois difficile de trouver l’information manquante
Une page de manuel se décompose en plusieurs parties distinctes
NAME : Nom et description rapide de la commande
SYNOPSIS : Syntaxe(s) de la commande
DESCRIPTION : Description complète de la commande
OPTIONS : La description des options
AUTHOR : Un mot sur l’auteur
BUGS : bugs connus
SEE ALSO : Autres commandes connexes à consulter également
… (Dépend des commandes)
Page 13
Syntaxe :
man commande
NAME
SYNOPSIS
DESCRIPTION
Page 14
Il existe plusieurs sections dans une page de manuel
9 au maximum
Pour obtenir une section donnée
man 2 fork
Page 16
Capacité de rediriger les entrées/sorties d’une commande
« stdout » ou « stderr » vers un fichier plutôt qu’à l’écran
« stdin » depuis un fichier plutôt que le clavier
Utilisation des opérateurs suivants :
> : Redirection de la sortie vers un fichier
>> : Redirection de la sortie à la fin du fichier (concaténation)
< : Redirection de l’entrée depuis un fichier
Exemple de redirection de la sortie vers un fichier :
ls –l /etc > listing-etc.txt
Page 17
2 syntaxes supplémentaires possibles pour les redirections
n>&m ou
n>fichier
Page 19
Exécution
d’une ligne de commandes
Page 20
Pour exécuter une seule commande, rien de plus simple
Taper son nom au clavier
Pour exécuter plusieurs commandes à la suite
L’exemple suivant crée un répertoire, s’y déplace et crée un fichier
mkdir toto ; cd toto ; touch alire.txt
Page 21
Une commande renvoie toujours une valeur
0 si la commande s’est exécutée correctement
1 ou différent de zéro dans le cas contraire
Exemple
La variable « $? » correspond à la valeur renvoyée par la dernière
commande exécutée (Donc la commande « cd »)
# cd toto
Bash : cd toto : Le répertoire n‟existe pas
# echo $?
1
Page 22
Copier le fichier « /etc/syslog.conf » vers son répertoire home
Page 23
Copier le fichier « /etc/syslog.conf » vers son répertoire home
cp /etc/syslog.conf ~/
Page 24
Caractères spéciaux
et leur signification
Page 25
Certains caractères ont une signification particulière
Interprétés par le shell
Astérisque ou étoile : *
Interprété comme toute suite de caractères alphanumérique
Exemple : Effacer tous les fichiers commençant par « rapport »
rm rapport*
Point d’interrogation : ?
Interprété comme un seul caractère alphanumérique
Exemple : Effacer certains fichiers commencant par « rapport?.doc »
rm rapport?.doc
Page 26
Les crochets : []
Remplace un caractère choisi parmi ceux énumérés entre les
crochets
Exemple : Effacer les fichiers dont la 1ère lettre est « a » ou « b » et
se terminant par « .txt »
rm [ab]*.txt
L’espace
Utilisé comme séparateur de paramètres pour une commande
Exemple : Effacement de 2 fichiers passés en paramètres
rm rapport.doc rapport2008.txt
Page 27
L’antislash : \
Inhibe le caractère spécial suivant
Exemple : Effacer un fichier contenant le caractère spécial espace
rm rapport\ .txt
Page 28
Il existe plusieurs délimiteurs de chaînes de caractères
Apostrophe (simple quote) : ‘texte‘
• Le texte n’est pas du tout interprété
Guillemets (double quotes) : "texte"
• Seuls les caractères \ , $ et ` sont interprétés
• Utilisé pour du texte qui contient des variables ou des caractères
spéciaux
Anti-quotes : `texte`
• Le texte est interprété comme une commande à exécuter. Le
résultat de cette commande sera substitué
• Utilisé dans le but d’exploiter le résultat d’une commande
Exemples
Page 29
Exemples
Rechercher la chaîne « toto » dans tous les fichiers du répertoire
« /home/moi »
grep „toto‟ /home/moi/*
Page 30
Déplacer tous les fichiers commençant par « bilan » vers le
répertoire « bilans » qu’il faut créer avant
Page 31
Déplacer tous les fichiers commençant par « bilan » vers le
répertoire « bilans » qu’il faut créer avant
mkdir bilans ; mv bilan*.* bilans/
Page 32
Qu’est qu’un script shell ?
Page 33
Un script est un fichier contenant un ensemble de commandes
exécutées séquentiellement
Sous forme de fichier texte contenant les commandes
Page 34
Un script shell permet de lancer une succession de commandes,
d’automatiser des procédures en fonction de l’utilisateur qui lance
le script, etc.
Page 35
Il s’agit d’un fichier texte correspondant à un programme devant
solutionner un problème donné. On peut/doit le démarrer
comme ceci :
#!/bin/bash
# Début du script
…
Page 36
37
Page 37
38
Page 38
39
Exemple de script
#!/bin/bash
exit 1
Page 39
Pour exécuter le script, il faut appeler l’interpréteur
root@foulen:~# bash monscript
Page 40
L’utilisateur courant doit posséder le droit « x » pour le fichier
Page 41
Les variables sous le shell
Page 42
Ces variables sont définies à l’ouverture de session
Leurs valeurs dépendent de l’utilisateur connecté
Exemple : Variable PATH
Défini les différents chemins où chercher les commandes
root@foulen:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Page 43
Lecture, affichage et affectation d’une variable simple
let var=0
Var5=`date`
Page 44
Manipulation des variables tableaux
Page 45
Manipulation des variables tableaux
Page 46
Manipulation des variables tableaux
Page 47
Manipulation des variables tableaux
Page 48
Définition d’une expression
Page 49
Affecter une expression à une variable
Page 50
Saisie des données
et affichage des résultats
Page 51
Entrées/sorties
Page 52
Entrées/sorties
La commande utilisée pour afficher quelque chose sur l’écran est
echo chaine
La chaine peut renfermer des caractères spéciaux à interpréter au
niveau de l’affichage comme
\c pas de passage à la ligne
\b backspace
\n newline,…
• Exemples:
echo “Hello World !!”
echo –e “\t votre nom...? \c"; read name; echo "hello $name"
echo nombre d\‟arguments = $#
Page 53
Entrées/sorties
• On peut recourir à la commande printf pour afficher des données
formatées sur l’écran
printf "formatage" variable…
Cette commande est identique à celle du langage C.
Page 54
Paramètres d’un script
Page 55
Elles sont définies implicitement et peuvent être utilisées à tout
moment dans le script
Exemples de variables
• $0 : Nom du script
• $? : Résultat de la commande précédente
• $$ : numéro du processus en exécution
• $! : numéro du processus en arrière plan
root@foulen:~/Documents/cours-shell#
Exemple de script
#! /bin/sh
cat script.sh
cp $1 tata.txt
echo $?
Exécution du script
root@foulen:~/Documents/cours-shell# ./script.sh file.txt
cp: ne peut évaluer `file.txt': Aucun fichier ou dossier de ce type
1
Page 56
Paramètres formels d’un script
Les variables utilisées pour la manipulation des paramètres d’un
script sont :
• $1 à $9 : Argument 1 à 9 passés au script
• $# : Nombre d’arguments passés au script
• $@, $* : Liste des paramètres (Lorsqu’elles ne sont pas entourées
par des guillemets, elles sont équivalentes)
Exemple
$ cat script.sh
#!/bin/bash
echo nom du script $0
echo nombre d\‟arguments = $# Paramètres formels
echo liste des arguments = $@
echo argument n°2 = $2
Page 57
Commande ’shift’
La commande shift permet de décaler la liste des arguments d'une ou
plusieurs positions vers la gauche.
Exemple de script qui doit recevoir en premier argument le nom d'un
dossier à créer puis pour les arguments suivants les noms de fichiers à
créer
Page 58
Commande ‘set’
La commande set sans paramètres affiche la valeur de toutes les
variables d'environnement.
Elle peut servir à découper une chaine de caractères en mots;
chacun étant récupéré dans un paramètre formel $1..$9
Exemple
$ a=1 ; b=2 ; c=3 ; set a b c ; echo $1, $2, $3
# les valeurs de a, b, c sont récupérées dans $1, $2, $3
Page 59
Commande ‘set’
Les paramètres spéciaux $@ et $* contiennent tous deux la liste
des valeurs des paramètres de position initialisés.
Ces deux paramètres spéciaux ont des valeurs distinctes lorsque
leur référence est placée entre des guillemets ("$*" et "$@").
Exemple
$ set bonjour "deux coucou" salut
$ set "$*"
$ echo $#
1
$ echo $1
bonjour deux coucou salut
Page 60
Structures conditionnelles
Page 61
Structures de contrôle conditionnel
Les structures de contrôle conditionnel sont les commandes de
branchement if et de choix multiple case
Les structures conditionnelles peuvent bien sûr être imbriquées
Page 62
Structure de contrôle ‘if ‘
Permet d’effectuer une exécution conditionnelle
if [ expression ]
then
# commandes à exécuter si la cond. est vraie
else
# commandes à exécuter si la cond. est vraie
fi
Page 64
Commande test pour exprimer la condition
Dans l’expression d’une condition avec la commande test ou [ … ]
on recours à des opérateurs
Liste des opérateurs logiques
• ! : Négation
• -a : Et (And)
• -o : Ou (Or)
Liste des opérateurs numériques
• -eq : Egalité (Equals)
• -ne : Non égalité (Non Equals)
• -lt : Infériorité (Less than)
• -le : Infériorité ou égalité (Less than)
• -gt : Supériorité (Greater then)
• -ge : Supériorité ou égalité (Greater equals)
Page 65
Expression de la condition
Liste des opérateurs sur chaîne de caractère
• -z : Chaîne vide
• -n : Chaîne non vide
• = : Egalité de chaîne
• != : Non égalité de chaîne
Liste des opérateurs sur fichiers
• -L : Lien symbolique
• -d , -f : Répertoire, Fichier ordinaire
• -s : Fichier vide
• -r, -w, -x : Droits qui s’appliquent (Lecteur, Ecriture, Exécution)
• -nt : Plus récent (Newer than)
• -ot : Plus vieux (Older than)
Page 66
Exemples
# Teste si le paramètre $1 est egal à 2
if [ $1 -eq 2 ]
then
:
# ce qui précède est la commande ne rien faire (nop : no operation)
fi
Page 67
Tester si le paramètre 2 est un fichier
Page 68
Tester si le paramètre 2 est un fichier
Réponse
if [ -f $2 ]; then echo ok ; fi
Page 69
Script capable de créer le répertoire passé en argument et de vérifier
que sa création n’a pas provoqué d’erreurs
Réponse
if [ $# -ne 1]; then
echo "Nombre d‟arguments erroné"
exit 1
fi
if [ ! –d $1 ] ; then
mkdir $1 2> /dev/null
if [ $? –ne 0 ] ; then
echo "Erreur lors de la création de $1"
exit 2
fi
else echo "Erreur $1 existe déjà"
exit 3
fi
#suite
Page 70
Structure conditionnelle ‘case’
Page 71
Exemple d’une conditionnelle ‘case’
#!/bin/bash
echo “Affichage répertoire courant 1“
echo “Liste des fichiers du répertoire 2“
echo “Retour au répertoire HOME 3“
echo "Sortie 0"
case $choix in
0) break ;;
1) pwd ;;
2) ls –l ;;
3) cd ;;
*) echo “donnée introduite erronée”; exit ;;
esac
Page 72
Exercices
Tester si le nombre d'arguments fournis par l'utilisateur est
compris entre 1 et 2. Les afficher si c’est correct, sinon afficher un
message d’erreur.
Tester si la réponse saisie au clavier correspond à « oui » ou
« non ». La réponse introduite n’a pas une casse particulière. On
peut introduire les minuscules et majuscules à sa guise.
Tester sur le script admet un et un seul argument qui doit être
obligatoirement un nombre entier.
Page 73
Exercices
Tester si le nombre d'arguments fournis par l'utilisateur est
compris entre 1 et 2. Les afficher si c’est correct, sinon afficher un
message d’erreur.
Réponse
#!/bin/bash
case $# in
0) echo "aucun parametre"
echo "Syntaxe : $0 <nom d'utilisateur>";;
1) echo "1 parametre passe au programme : $1";;
2) echo "2 parametres passes au programme : $1 et $2";;
*) echo "TROP DE PARAMETRES !" ;;
esac
Page 74
Exercices
Tester si la réponse saisie au clavier correspond à « oui » ou
« non ». La réponse introduite n’a pas une casse particulière. On
peut introduire les minuscules et majuscules à sa guise.
Réponse
#!/bin/bash
read –p "Voulez vous continuer le programme ?" reponse
case $reponse in
[Oo][Uu][Ii]) echo "Ok, on continue";;
[nN][Oo][Nn]) echo "$0 arrêté ;-)"
exit 0;;
*) echo "ERREUR de saisie"
exit 1;;
esac
Page 75
Exercices
Tester sur le script admet un et un seul argument qui doit être
obligatoirement un nombre entier.
Réponse
#!/bin/bash
if test $# -ne 1
then echo Nombre d\‟arguments erronés
exit 1
fi
case $1 in
*[!0-9]*) echo "$1 n'est pas un nombre"
exit 2
;;
esac
Page 76
Structures de boucle
Page 77
Structures de boucle
Page 78
Structures de boucle ‘for’
echo „liste des fichiers C‟; for i in *.c do echo $i; done
Page 79
Structures de boucle ‘for’
• Exemple
#!/bin/bash
for (( ; ; ))
do echo “boucle infinie [ taper CTRL+C pour stopper]"
done
Page 80
Structures de boucle ‘while’
Page 81
Structures de boucle ‘until’
Page 82
Exercice
• Demander à l'utilisateur de dire « oui » et répéter cette action
tant qu’il n'a pas fait ce que l'on voulait
Page 83
Exercice
• Demander à l'utilisateur de dire « oui » et répéter cette action
tant qu’il n'a pas fait ce que l'on voulait
Réponse
#!/bin/bash
# la variable reponse est initialement vide
while [ -z $reponse ] || [ $reponse != 'oui' ]
do
read -p 'Dites oui : ' reponse
done
for dossier in $*
do if [[ -d $dossier ]]
then
echo "Liste des fichiers du dossier $dossier"
for fichier in `ls $dossier`
do
echo "$fichier"
done
fi
done
Page 85
Fonctions et appel de fonctions
Page 86
Fonctions et leur appel
• Déclaration et implémentation d’une fonction :
function nomFonction ( )
{
commande…
}
Page 87
Exemple de fonction sans paramètres
• Exemple de fonction sans paramètre
function menu_du_jour() {
echo " 1: entrée "
echo " 2: plat principal "
echo " 3: dessert "
read " préciser votre choix (1,2,3): " choix
}
Page 88
Exemple de fonction avec paramètres
• Exemple de fonction avec paramètres
function listerParam ( )
{ echo " nbr de paramètre = $# "
for i in $*
do
echo $i
done
}
Page 89
Exemple de récupération de la valeur retournée
• Exemple de fonction retournant une valeur
function Coderetour( )
{ #calcul d’un résultat numérique par exemple
#la somme des 2 paramètres en entrée
res=`expr $1 + $2`
return res
}
Page 90
Exercice
Page 91
Exercice
• Ecrire un script pour faire du calcul simple du style op1 + op2.
Réponse
#!/bin/bash
function calcul ()
{ case $2 in
‘+’) expr $1 + $3;;
‘-’) expr $1 - $3;;
‘*’) expr $1 \* $3;;
‘/’) expr $1 ‘/’ $3;;
*) echo ‚opérateur inconnu‛; exit;;
esac
}
Page 92
Exercice
if [ $# -ne 2 ]
then echo "Vous devez donner deux arguments à la fonction."
exit 0
fi
max2 $1 $2
returnval=$?
if [ $returnval -eq 0 ]
then echo "Les deux nombres sont identiques."
else echo "Le plus grand des deux nombres est $returnval."
fi
Page 93
Exercice
for x in ${ARRAY[@]}
do [ "${x}" == "${needle}" ] && return 0
done
return 1
}
Page 94
Autres commandes
Page 95
La commande ‘select’
Page 96
La commande ‘select’
Exemple
#!/bin/bash
PS3="Votre choix : "
select item in "Sauvegarde" "Restauration" "Fin"
do
case $REPLY in
1) echo Appel de la fonction sauve ;;
2) echo Appel de la fonction restaure ;;
3) echo "Fin du script" ; exit 0 ;;
*) echo "Choix incorrect" ;;
esac
done
Page 97
La commande ‘trap’
Exemple
# ignorer les signaux
trap "" 2 3 15
# changer le comportement par défaut
trap "echo interception; echo autre traitement" 2 3 15
# traitement par défaut
trap 2 3 15
Page 98
La commande ‘trap’
Exemple
# interception du signal SIGINT=2
trap "echo 'sig INT intercepté' " INT
Page 99
Exercice
Page 100
Exercice
Page 101
Exercice
• Ecrire une boucle qui ne peut pas être interrompue, sauf par
l'entrée du bon mot de passe (par exemple mo2pass)
#!/bin/sh
trap "" 2 3 15 # ignorer les signaux
while :
do
echo –e "Entrez le mot de passe : \c"
read mdp
if [ "$mdp" = "mo2pass" ]
then echo "mot de passe valide !"
break
fi
done
trap 2 3 15 # revenir à l'état par défaut
Page 102
Page 103