TP n°6

Transcription

TP n°6
IUT La Rochelle - Dépt R&T
Informatique 1ème année
2009-2010
Laurent Demay
C. Sempé, J.L. Sabourin
Premiers scripts Shell
T.P. n°6
Fichiers scripts :
Un script est un fichier texte contenant une suite de commandes que l’on peut invoquer (exécuter) depuis un shell Unix.
Il existe plusieurs langages de script plus ou moins évolués : perl , python, php, shell, …
Les scripts shell correspondent au(x) langage(s) de commande d’Unix et comportent généralement l’extension .sh
En-tête :
L’interpréteur de commandes destiné à exécuter le script peut être précisé dans sa première ligne après les caractères #!
Exemples :
#!/usr/perl
#!/bin/csh
(Perl)
(C-shell)
#!/bin/ksh
(Korn-shell)
#!/bin/bash
(Bourne-shell Gnu)
s’il n’est pas précisé, votre interpréteur de commande par défaut sera utilisé (généralement #!/bin/bash sous Linux).
Remarque : /bin/sh est généralement un lien symbolique vers le shell par défaut et peut également être utilisé
Syntaxe des scripts shell :
Comme tout langage de programmation, le shell dispose d’ instructions et peut manipuler des variables.
Le jeu d’instructions comporte : toutes les commandes Unix, l’invocation d’autres scripts, l’affectation de variables
des instructions conditionnelles, itératives et d’entrée-sortie
On peut ajouter des commentaires après le symbole # (ce qui suit est ignoré), sauf pour le rôle spécial de la première ligne
Exécution d’un script shell :
Il y a plusieurs méthodes pour exécuter un script shell script.sh :


- on peut directement taper son nom absolu ou relatif « ./script.sh »  Le script est exécuté dans un (nouveau) sous-shell
dans ce cas, il faut posséder ses droits en exécution

c’est le shell précisé en en-tête qui est utilisé

- on peut passer le script en paramètre d’un shell : « sh script.sh »
- on peut taper « source script.sh »
ou « . script.sh »

 Le script est directement exécuté dans shell courant

1. Créez le script exemple.sh ci-dessous et testez les commandes
#!/bin/sh
echo "PID du shell : $$"
chmod u-x exemple.sh
echo $$
sh exemple.sh
source exemple.sh
. exemple.sh
./exemple.sh
2. Rajoutez les droits en exécution à exemple.sh et testez les commandes
3. Tapez et interprétez les commandes suivantes
./exemple.sh
exemple.sh
echo $PATH
PATH=$PATH:.
exemple.sh
Pour invoquer un script par son nom sans le précéder de ./ il faut que le répertoire . soit cité dans la variable PATH
1
Variables :
Les variables du shell contiennent toutes des expressions (chaines de caractères).
Elles n’ont pas besoin d’être déclarées et prennent vie lors de la première affectation.
Syntaxe d’une affectation :
var=expression
On accède au contenu de la variable
var
par
$var
(il ne doit pas y avoir d’espace autour du =)
ou
4. Testez et interprétez les commandes suivantes
5. Testez également les commandes suivantes
(on préfixe son nom par le symbole $)
${var}
var=OK
echo var
echo $var
echo ma$variable
echo ma${var}iable
var=ls –a
var="ls –a"
echo '$var'
echo "$var"
echo "\$var"
echo `$var`
Si une variable var contient une expression numérique, il faut utiliser $((……)) pour manipuler sa valeur dans
un calcul utilisant les opérateurs arithmétiques + - * / (il faut mettre des espaces autour des opérateurs).
6. Testez et interprétez les commandes suivantes
i=18
echo $(($i / 5))
j=$(($i + 1))
echo $j
Paramètres d’un script :
Dans un script, on peut utiliser des paramètres qui seront définis lors de son exécution (arguments à la ligne de commande)
7. Créez le script affiche.sh ci-contre puis testez les commandes
./affiche.sh deux trois un quatre
./affiche.sh deux "trois un" quatre
./affiche.sh "deux trois" "un quatre"
Dans un script on peut utiliser les variables spéciales suivantes :
$0
$#
$1
#!/bin/sh
echo "nom du script : $0"
echo "$# paramètres :"
echo "1er : $1"
echo "2nd : $2"
echo "3eme : $3"
echo "liste complète : $*"
nom du script
nombre de paramètres passés en arguments
premier paramètre

chaine vide si le paramètre n'existe pas  …
 $9 neuvième paramètre
$* liste de tous les paramètres
Si la ligne de commande comporte plus de 9 arguments, on peut utiliser la liste $* de tous les paramètres, ou bien effectuer
un décalage de n positions vers la gauche des paramètres avec la commande shift n (cf documentation).
8. Ecrivez et testez un script qui affiche la valeur des arguments n°9, 10 et 11 de la ligne de commande.
Affichez également la valeur de $# après votre commande shift et interprétez.
9. Ecrivez le script nettoie.sh qui efface tous les fichiers réguliers d’un répertoire donnés, sauf certaines exceptions.
./nettoie.sh rep fich1 fich2 … fichN
Syntaxe :
Les noms de fichiers à conserver (indiqués à partir du 2ème argument) peuvent contenir des jokers (motifs du shell).
Exemple : ./nettoie.sh TP6 \*.txt \*.sh
efface tous les fichiers du répertoire TP6
sauf ceux d’extension txt ou sh
Etapes :
- sauvegardez votre répertoire courant dans une variable et placez vous dans le répertoire rep
- créez un sous-répertoire .tmp , déplacez-y les fichiers à conserver
- supprimez tous les autres fichiers du répertoire rep , et redéplacez-y les fichiers conservés
- supprimez le sous-répertoire .tmp et replacez vous dans le répertoire d’origine
2

Documents pareils