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