0% ont trouvé ce document utile (0 vote)
3 vues27 pages

Cours UNIX-chapitre 6

Le chapitre 6 sur la programmation Shell présente le Shell comme un interpréteur de commandes qui exécute les instructions de l'utilisateur et gère les variables et les redirections. Il décrit également les différents types de Shell disponibles, la création et l'exécution de scripts, ainsi que l'utilisation de structures de contrôle comme 'if' et 'case', et les boucles 'while' et 'for'. Enfin, il fournit des exemples pratiques d'utilisation des commandes et des variables dans des scripts Shell.

Transféré par

mednadir.boussefina
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues27 pages

Cours UNIX-chapitre 6

Le chapitre 6 sur la programmation Shell présente le Shell comme un interpréteur de commandes qui exécute les instructions de l'utilisateur et gère les variables et les redirections. Il décrit également les différents types de Shell disponibles, la création et l'exécution de scripts, ainsi que l'utilisation de structures de contrôle comme 'if' et 'case', et les boucles 'while' et 'for'. Enfin, il fournit des exemples pratiques d'utilisation des commandes et des variables dans des scripts Shell.

Transféré par

mednadir.boussefina
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Linux Chapitre 6: Programmation Shell

Programmation Shell

page : 79
Linux Chapitre 6: Programmation Shell
Le Shell

❖ Un Shell est un programme exécuté par le système, c’est


un interpréteur de commandes qui :
▪ initialise l’environnement de l ’utilisateur
▪ affiche un prompt, lit et exécute les instructions tapée par
l ’utilisateur

❖ quand une commande est tapée, le shell :


▪ interprète les variables les méta caractères
▪ gère les redirections et les tubes (« pipes »)
▪ interprète la commande
▪ exécute la commande

page : 80
Linux Chapitre 6: Programmation Shell
Le Shell (2)

❖ Il existe plusieurs shell, sur les systèmes de type Unix, dont


les plus connus sont les suivants :
▪ Bash (le Bourne Again SHell).
▪ Sh (le bourne SHell) : Ce shell fut le premier présent dans les
systèmes Unix et est à l'origine de tout les autres.
▪ Ksh (Korn SHell).
▪ Csh (le C SHell) : dont la syntaxe est inspirée du langage C).
▪ Tcsh (le Tenex C Shell) : C'est une évolution du Csh.
▪ Zsh (le Z Shell) : C'est un shell récent basé sur Bash, Ksh et Tcsh.

page : 81
Linux Chapitre 6: Programmation Shell
Les variables

❖ une variable du Shell est un nom associé à une valeur

❖ par défaut, toutes les variables sont initialisées à NULL


(vide)

❖ certaines variables sont prédéfinies

❖ les utilisateurs peuvent définir et utiliser leurs propres


variables

page : 82
Linux Chapitre 6: Programmation Shell
Les variables (2)

 Quelques variables prédéfinies :

❖ HOME répertoire de login


❖ PATH répertoires à inspecter pour trouver les
commandes tapées par l ’utilisateur
❖ TERM type du terminal
❖ PWD directory courante

page : 83
Linux Chapitre 6: Programmation Shell
Les variables (3)

 Affectation des variables du shell :


❖ Syntaxe :
NomDeLaVariable=value
❖ Exemples :
Ubuntu:~/tmp$ MY_NAME=Ubuntu
Ubuntu:~/tmp$ MESS=/usr/man/man1/ls.1
Ubuntu:~/tmp$ var5="Bonjour tout le monde"

page : 84
Linux Chapitre 6: Programmation Shell
Les variables (4)

 Renvoi de la valeur d ’une variable


❖ Syntaxe:
$NomDeLaVariable
❖ Exemples:
Ubuntu:~/tmp$ echo $MY_NAME
Ubuntu
Ubuntu:~/tmp$ echo $MESS
/usr/man/man1/ls.1
Ubuntu:~/tmp$ more $MESS
<contenu of /usr/man/man1/ls.1>

page : 85
Linux Chapitre 6: Programmation Shell
Les petits exemples

$ V1=toto
$ echo $V1
toto

$ V2=’titi tutu’
$ echo $V2
titi tutu
$ echo ’$V2’
$V2

$ echo "$V1 $V2"


toto titi tutu

$ V3="$V1 $V2 tata"


$ echo $V3
toto titi tutu tata

Attention à la différence entre ". . . " et ’. . . ’!

page : 86
Linux Chapitre 6: Programmation Shell
Parenthèse: substitution de commandes

❖ Stocker le résultat de l’appel à une commande


dans une variable?
$ msg="Je travaille dans ‘pwd‘" # Old-style
$ echo $msg
Je travaille dans /tmp
$ msg="Je travaille dans $(pwd)" # ksh/bash-style
$ echo $msg
Je travaille dans /tmp
...

page : 87
Linux Chapitre 6: Programmation Shell
Les scripts Shell
❖ Un script est un fichier contenant un ensemble de commandes
exécutées séquentiellement
▪ Sous forme de fichier texte contenant des commandes
❖ Le script ne peut être exécuté que par un interpréteur
▪ « /bin/bash » pour le Bash
▪ « /bin/sh » pour le Sh
▪ « /bin/zsh » pour le Zsh
❖ Le langage de script Shell est un langage évolué offrant de
nombreuses possibilités
▪ Boucles, variables, tests avec if, création de fonctions, …
❖ Dans quels cas utilise-t-on les scripts ?
▪ Pour effectuer un travail répétitif
▪ Pour des tâches d’administration système
▪ Pour installer des programmes
▪ Au démarrage du système pour démarrer les services et applis
page : 88
Linux Chapitre 6: Programmation Shell
Exécuter un script

❖ Pour exécuter le script, il faut appeler l’interpréteur


Ubuntu@localhost:~ # bash monscript

❖ Possibilité de simplifier l’appel en ajoutant la ligne suivante en tête du


script
#!/bin/bash

▪ L’appel est alors plus simple


root@localhost:~ # ./monscript

❖ L’utilisateur courant doit posséder le droit « x » pour le fichier


▪ Exemple : Seul, l’utilisateur « ubuntu » pourra exécuter le script
-rwxr--r-- 1 Ubuntu info 7406 2008-08-15 14:44 [Link]

▪ Pour autoriser les membres du groupe « info »


chmod g+x [Link]

page : 89
Linux Chapitre 6: Programmation Shell
Variables de substitution
❖ Elles sont définies implicitement et peuvent être utilisées à tout
moment dans le script
❖ Quelques variables utiles
▪ $0 : Nom du script (Utile lorsqu’on renomme le script)
▪ $1 à $9 : Argument 1 à 9 passés au script
▪ $# : Nombre d’arguments passés au script
▪ $? : Résultat de la commande précédente
❖ Exemple: en peut remplacer @ par * pour certain systemes
#!/bin/bash
echo "La commande $0 a $# paramètre(s), que voici : $@"

❖ Exécution
Ubuntu@localhost:~ # ./params bla ble bli blo blu
La commande ./params a 5 paramètre(s), que voici : bla ble bli blo blu

page : 90
Linux Chapitre 6: Programmation Shell
Commandes orientées Shell

❖ echo : affichage de texte sur la sortie standard


❖ expr : évaluation d'expressions numériques
❖ read : entrée standard
❖ clear : efface l'écran

page : 91
Linux Chapitre 6: Programmation Shell
echo
❖ Syntaxe :
$ echo [-n] message
❖ Description :
La commande echo affiche sur la sortie standard les messages passés en
paramètres (après leur interprétation par le Shell).

❖ Option courante :
-n n'affiche pas de saut de ligne final

❖ Exemple :
$ echo ceci est un petit message
ceci est un petit message
$ echo $PATH
/bin:/usr/bin:/usr/local/bin:/usr/bin/X11:/usr/X11R6/bin:/home/rossigno
l_d/bin
page : 92
Linux Chapitre 6: Programmation Shell
expr

❖ Syntaxe :

$ expr expression
❖ Description :
Expression spécifie une opération arithmétique ou de traitements de chaînes
de caractères

❖ Exemple :
$ X=12
$ expr $X + 2
14
$ var1=10
$ var2=20
$ var3=$(expr $var2 / $var1)
$ echo $var3
2

page : 93
Linux Chapitre 6: Programmation Shell
read

❖ Syntaxe :

$ read variable [ variable … ]


❖ Description :
lit l ’entrée standard et affecte ce qui est lu aux variables

❖ Exemple :
$ read A
$ echo $A
$ read M1 M2 M3
$ echo $M3 $M2 $M1
$ echo -n ’Enter your name: ’; read name; echo "Hi, ${name}"
Enter your name: etudiant
Hi, etudiant

page : 94
Linux Chapitre 6: Programmation Shell
Exemples

 $ vi test3  $ vi test5
#!/bin/bash #!/bin/bash
# display user information from the system. # using the backtick character
echo "User info for userid: $USER" testing=`date`
echo UID: $UID
echo "The date and time are: " $testing
echo HOME: $HOME

 $ vi test4  $ vi test6
#!/bin/bash #!/bin/bash
# testing variables # An example of using the expr command
days=10 var1=10
guest="Katie" var2=20
echo "$guest checked in $days days ago" var3=`expr $var2 / $var1`
days=5 echo The result is $var3
guest="Jessica"
echo "$guest checked in $days days ago"

page : 95
Linux Chapitre 6: Programmation Shell
Structure de contrôle « if »

Le test if :
Permet d’effectuer une exécution conditionnelle.

Le test if peut s'écrire de deux manière:

if test $Variable #condition


then # alors
# vos commandes ici
fi # fin du bloc if (fi = if à l'envers)
et

if [ $Variable ] #condition
then # alors
# vos commandes ici
fi # fin du bloc if

page : 96
Linux Chapitre 6: Programmation Shell
Structure de contrôle « if » (2)

Il est également possible d'utiliser les conditions else (sinon) et elif (de else if qui signifie
sinon si) dans le même bloc :

if [ $Variable #condition ]
then # alors
# vos commandes ici
elif [ $Variable #condition ]
then
# vos commandes ici
else

# vos commandes ici


fi # fin du bloc if

! Attention aux espaces après le [ et avant le ].

page : 97
Linux Chapitre 6: Programmation Shell
Liste des opérateurs

❖ Certains opérateurs sont toutefois particulier en Bash, en voici une liste :

page : 98
Linux Chapitre 6: Programmation Shell
Liste des opérateurs (2)

page : 99
Linux Chapitre 6: Programmation Shell
Exemples

#!/bin/bash
echo "Voulez-vous afficher la man page du man ?"
read Variable # saisie de la variable
if test $Variable -eq 1 # si Variable vaut 1
then # alors
man man
fi # fin du bloc if

Voici la deuxième façon d'écrire ce script :

#!/bin/bash
echo "Voulez-vous afficher la man page du gcc ?"
read Variable # saisie de la variable
if [ $Variable -eq 0 ] # si Variable vaut 0
then # alors
man gcc
fi # fin du bloc if

page : 100
Linux Chapitre 6: Programmation Shell
Structure de contrôle « case »

Le test case :
Le test case est analogue au switch en C, il permet d'éviter une longue et
fastidieuse succession de blocs if dans certains cas.
Voici la syntaxe d'un test case.

read Variable # saisie de la valeur de la variable


case $Variable in
Valeur1)
Commande 1 ;;
Valeur2)
Commande 2 ;;
...
*)
Commande qui s'éxécute par défaut ;;
esac # fin du bloc case

page : 101
Linux Chapitre 6: Programmation Shell
Les boucles (1)

La boucle while :
Voilà comment se construit une boucle while :

while [ #condition ]
do
# instructions à répéter
done

Et voici la deuxième syntaxe possible :

while test #condition


do
# instructions à répéter
done

page : 102
Linux Chapitre 6: Programmation Shell
Exemple

On veut créer une boucle qui répète "vive le Bash !" tant que la valeur d'une
variable ne vaut pas 0.

#!/bin/bash
quitter=1
while [$quitter -ne 0 ]
do
echo "Appuyez sur 0 pour quitter ..."
read quitter
echo "vive le Bash !"
done
echo "bye !"

page : 103
Linux Chapitre 6: Programmation Shell
Les boucles (2)
La boucle for :
#!/bin/sh
i=0
for i in `seq 0 10`
do
echo "vive Linux !"
done
echo "bye !“
Ceci aurait pu s'écrire de la manière classique :

#!/bin/sh
i=0
for (( i=0 ; i<$value ; i++ ))
do
echo "vive Linux !"
done
echo "bye !"

page : 104
Linux Chapitre 6: Programmation Shell
Exemples
#!/bin/bash
echo " Liste des répertoires sous `pwd` "
for i in *
do
if [ -d $i ]
then
echo " $i est un répertoire "
fi
done

le chemin sera donné en paramètre:


#!/bin/bash
echo " Liste des répertoires sous $1 "
for i in $1/*
do
if [ -d $i ]
then
echo " $i est un répertoire "
fi
done
page : 105

Vous aimerez peut-être aussi