Description

ISET MEDENINE[2011-2012] TP3 : les shells Matière AS2 Classe TI1 A & B Enseignantes R. BEN AZZOUN S.BEN CHAABAN 1. Définition Sous Unix, on appelle shell l’interpréteur de commandes qui fait office d'interface entre l'utilisateur et le système d’exploitation. Les shells sont des interpréteurs : cela signifie que chaque commande saisie par l’utilisateur (ou lue à partir d’un fichier) est syntaxiquement vérifiée puis exécutée. Un shell est un interpréteur de commande en mode texte. Il peut s’utiliser en mode interactif ou pour exécuter des programmes écrits dans le langage de programmation du shell (appelés shell scripts). Exemples :  sh (Bourne shell)  bash (Bourne again shell)  csh (C shell)  ksh (Korn shell) Un shell possède un double aspect :  un aspect environnement de travail  un aspect langage de programmation. 2. Un environnement de travail En premier lieu, un shell doit fournir un environnement de travail agréable et puissant. Par exemple, bash permet le rappel des commandes précédentes (gestion de l’historique), la modification en ligne du texte de la commande courante, la gestion des travaux lancés en arrière-plan (ajout de & à la fin du commande), l’initialisation adéquate de variables de configuration et la création de raccourcis de commandes. En mode interactif, bash affiche à l’écran une chaîne d’appel (appelée également prompt ou invite), qui se termine par défaut par le caractère # suivi d’un caractère espace pour l’administrateur système (utilisateur root) et par le caractère $ suivi d’un caractère espace pour les autres utilisateurs. 1  csh exécute le fichier ~/. sont interprétés spécialement par le shell avant de lancer la commande entrée par l’utilisateur. Initialisation d’un shell Lors de leur démarrage. les shell exécutent des fichiers de configuration (généralement sous /etc. Un shell comme bash intègre :  les notions de variable. de fonction. 2 . de structure de contrôle.cshrc (le “rc” signifie run command)  sh exécute ~/. 4. appelé tube. est un opérateur caractéristique des shells et connecte la sortie d’une commande à l’entrée de la commande suivante. Shell utilisé La manière la plus simple de connaître le shell que l’on utilise est d’exécuter la commande unix ps qui liste les processus de l’utilisateur 5. présentes dans tout langage de programmation classique.bash_profile ou à défaut ~/.) Remarque : L’opérateur |.profile. On peut spécifier un intervalle avec le tiret . Un langage de programmation Les shells ne sont pas seulement des interpréteurs de commandes mais également de véritables langages de programmation.(Exemple :[a-z]spécifie l’ensemble des lettres minuscules). Métacaractères du shell Certains caractères. d’opérateur arithmétique. sans avoir à rentrer tous leurs noms. Voici les plus utilisés : *: remplacé par n’importe quelle suite de caractères ?: remplacé par un seul caractère quelconque [ ]:remplacé par l’un des caractères mentionnés entre les crochets. modifiable par l'administrateur système et utilisé chaque fois qu'un shell est lancé) qui peuvent contenir des commandes quelconques et sont généralement utilisés pour définir des variables d’environnement et des alias.profile  bash exécute ~/. mais aussi  des opérateurs spécifiques (ex : | et . 6. Les métacaractères permettent donc de spécifier facilement des ensembles de fichiers.ISET MEDENINE [2011-2012] 3. appelés métacaractères. La première ligne du script doit préciser l’interpréteur utilisé. on utilise son nom précédé d'un $. qui permettent de définir certains paramètres : répertoires d’installation des utilitaires. Variables d’environnement Le système UNIX défini pour chaque processus une liste de variables d’environnement. les fichiers d’initialisation sont donc “invisibles”. 8. 7. Fichiers shell ou scripts Lorsqu’un traitement nécessite l’exécution de plusieurs commandes. Voici quelques variables caractéristiques :  HOME : Répertoire de base d'un utilisateur (dynamique)  LOGNAME : Login de l'utilisateur en session (dynamique)  PATH : Ensemble des chemins de recherche des applications lancées  PS1 : Prompt  PWD : Répertoire courant (dynamique)  SHELL : Nom du shell courant (dynamique) ~ : Répertoire de base d'un utilisateur (dynamique) Remarque : pour désigner la valeur d'une variable. suivis du chemin de l’interpréteur. La commande set permet d’afficher la liste des variables d'environnement et de leurs valeurs. Un script peut être une simple liste de commandes.ISET MEDENINE [2011-2012] Rappelons que les fichiers dont le nom commence par un point ne sont pas affichés par la commande ls (sauf si on emploie l’option -a) . elle commence par les deux caractères #!. il est préférable de les sauvegarder dans un fichier plutôt que de les retaper au clavier chaque fois que le traitement doit être lancé. Ce type de fichier est appelé fichier de commandes ou fichier shell ou encore script shell. Chaque programme peut accéder à ces variables pour obtenir des informations sur la configuration du système. etc. type de terminal. Voici un exemple simple : #!/bin/bash # liste echo ‘’Contenu du repertoire courant’’ ls -l 3 . users+groups+others)  La deuxième ligne s’agit d’un commentaire (inutile dans le fonctionnement de script) qui comporte le nom du fichier. le symbole = et la valeur à affecter ne forment qu’une seule chaîne de caractères. PATH.ISET MEDENINE [2011-2012]  Ce script affiche la liste détaillée des fichiers du répertoire courant. L’utilisateur peut affecter une valeur à une variable en utilisant  l’opérateur d’affectation =  la commande interne read a) Affectation directe Syntaxe: nom=[valeur] Il est impératif que le nom de la variable. Les variables peuvent être classées en trois groupes :  les variables utilisateur (définies par l’utilisateur lors de l’ecriture du script)  les variables prédéfinies du shell (ex : PS1. enregistré dans un fichier (nommé par exemple “liste”). on peut utiliser la commande : bash nom_fich ou . c'est-à-dire une suite de lettres ou de chiffres. /nom_fich 9. les noms des variables utilisateur sont en lettres minuscules tandis que les noms des variables prédéfinies (du shell ou de commandes unix) sont en majuscules. puis rendu exécutable grâce à la commande chmod a+x liste (a designe all . REPLY.  Pour lancer l’exécution d’un fichier shell. IFS)  les variables prédéfinies de commandes unix (ex : TERM).  Il doit être entré à l’aide d’un éditeur de texte. En général. Utilisation des variables Une variable est identifiée par un nom. Les lettres majuscules et minuscules sont différenciées. Pour accéder au contenu (valeur) de variable on utilise le caractère $ suivi du nom de variable Exemple : > x=coucou > echo ‘’x est :’’ $x x est coucou 4 . Plusieurs affectations peuvent être présentes dans la même ligne de commande. .. ] Exemple: > read a b bonjour Monsieur > echo $b Monsieur Lorsque la commande interne read est utilisée sans argument. le shell affecte le premier mot à la première variable. Exemple: > read bonjour tout le monde > echo $REPLY bonjour tout le monde L’option –p de read affiche une chaîne d’appel avant d’effectuer la lecture .ISET MEDENINE [2011-2012] b) Affectation par lecture Elle s’effectue à l'aide de la commande interne read. Syntaxe: read [ var1 . etc. la dernière variable reçoit tous les mots restants. on utilise la syntaxe : declare –r nom=valeur 5 . c) Variable en « lecture seule » Pour définir une variable dont la valeur ne doit pas être modifiée (appelée constante dans d’autres langages de programmation). la syntaxe à utiliser est : read –p chaîne_d_appel [ var … ] Exemple: > read -p "Entrez votre prenom : " prenom Entrez votre prenom : Eric > echo $prenom Eric Remarque : S’il y a moins de variables que de mots dans la ligne lue.. la ligne lue est enregistrée dans la variable prédéfinie du shell REPLY . le deuxième mot à la deuxième variable. Celle-ci lit une ligne entière sur l’entrée standard (le clavier). . dans l'ordre de frappe et incluant le nom de la commande. on utilise la commande interne unset ou set .Commande interne set La commande interne set affecte une valeur à un ou plusieurs paramètres de position en numérotant ses arguments suivant leur position. La numérotation commence à 1.Syntaxe : unset var Remarques :  on peut récupérer également des items de la ligne de commande via les codes $0. Syntaxe: set arg1 arg2 arg3 Exemple: > set alpha beta gamma Pour obtenir la valeur d’un paramètre de position..ISET MEDENINE [2011-2012] 10. $1 permet d’obtenir la valeur du premier paramètre de position. 6 .) 11. $3. $2 la valeur du deuxième et ainsi de suite.  la Récupération du nombre d'items avec $#. (0 indique "Pas d'erreur d'exécution".Substitution de commandes Syntaxe : $( cmd ) Une commande cmd entourée par une paire de parenthèses () précédées d'un caractère $ est exécutée par le shell puis la chaîne $( cmd ) est remplacée par les résultats de la commande cmd écrits sur la sortie standard (l’écran). Exemple : > echo $3 $2 alpha beta Pour supprimer une ou plusieurs variables. Exemple : > ls -l /home > echo $3 /home => $0 : ls $1 : -l $2 : /home  La Récupération de la liste complète des items avec $*. Ces résultats peuvent alors être affectés à une variable ou bien servir à initialiser des paramètres de position.. $2.  La Récupération du résultat d'exécution de la dernière commande via le code $?. $1. ainsi. il suffit de placer le caractère $ devant son numéro . .Les structures itératives il existe des classiques instructions de structuration comme if.. v2) .. case. done done else . do do .... .  test -f fichier : Vrai si fichier ordinaire  test -d fichier : Vrai si fichier répertoire  test -r fichier : Vrai si fichier est accessible en lecture  test -w fichier : Vrai si fichier est accessible en écriture. fi esac 13..ISET MEDENINE [2011-2012] > pwd /home/sanchis => résultat écrit par pwd sur la sortie standard > repert=$(pwd) => la chaîne /home/sanchis remplace la chaîne $(pwd) > echo mon repertoire est $repert mon repertoire est /home/sanchis 12. If if commande case case variable in For for variable in liste while while commande then v1) .  test -s fichier : Vrai si fichier non nul  tests de comparaison entre deux expressions de type chaine de caractères :  test E1 = E2 : E1 égal à E2  test E1 != E2 : E1 différent de E2  tests de comparaison sur expressions numériques :  test E1 -eq E2 : E1 égal à E2  test E1 -ne E2 : E1 différent de E2  test E1 -ge E2 : E1 plus grand ou égal à E2 7 ..  test -x fichier : Vrai si fichier est exécutable....Les tests dans le shell UNIX propose une procédure de TEST pour programmer une condition (avec la commande test suivie de la condition)  Tests sur les caractéristiques des fichiers. . vn) … . for et while qu’on peut les utiliser dans les scripts shell. . .... Exemple : > untrois Entrez une suite de mots : un petit coucou de Rodez un coucou Exercice 5 copier le script suivant dans un fichier « copier » et l'exécuter avec copier /home fich et interpréter le résultat 8 . Exercice 4 Ecrire un programme shell « untrois » qui demande à l'utilisateur de saisir une suite de mots constituée d'au moins trois mots et qui affiche sur la même ligne le premier et le troisième mot saisis. Exercice 2 Ecrire un programme shell deuxfois qui affiche le message "Entrez un mot : ". lit le mot saisi par l'utilisateur puis affiche ce mot deux fois sur la même ligne. Exercice 3 Créer un script shell nommé "change" qui affichera la date de dernière modification d'un fichier puis la modifiera avec l'heure actuelle et enfin réaffichera la date de dernière modification du fichier. Cette procédure acceptera 1 paramètre qui sera le nom du fichier.ISET MEDENINE [2011-2012]  test E1 –gt E2 : E1 strictement plus grand qu’E2  test E1 -le  test E1 -lt E2 : E1 strictement plus petit qu’E2 E2 : E1 plus petit ou égal à E2  tests des booléens :  test (E) : E est vrai  test !E : E est faux  test E1 -a E2 : E1 et E2  test E1 -o E2 : E1 ou E2 Exercices d’applications Exercice 1 Ecrire un script shell nommé ladate qui affiche la date du système. Interpréter le résultat # !/bin/bash echo '$1' est $1 set hello echo '$1' est $1 Exercice 7 En utilisant la substitution de commande. Exercice 8 Ecrire un script shell nommé heure dans le quel vous affichez la date sous la forme suivante: La date du jour est: jour mois année L’heure actuelle est: heure Exercice 9 Créer un script shell nommé "nombreJours" qui affichera le nombre de jours du mois courant.ISET MEDENINE [2011-2012] #!/bin/bash # copie echo "Nom du programme : $0" echo "Nb d'arguments : $#" echo "Source : $1" echo "Destination : $2" Exercice 6 Ecrire le script suivant dans un fichier « ecrase » et l'exécuter avec la commande : ecrase bonjour coucou. Chaque fichier contient une seule ligne: 9 . "nombreJours" affichera pour mars 2012 le message "31 jours en mars 2012". écrire un fichier shell « mach » qui permet d'afficher le nom d'utilisateur avec lequel vous travaillez et votre répertoire courant. Exercice 10 Créer un script shell nommé « création » réalisant la création d'un répertoire "Exo3" contenant 5 fichiers nommés "Un" à "cinq". . "table 5 10" aura pour résultat l'affichage: 0x5=0 1x5=5 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25 6 x 5 = 30 7 x 5 = 35 8 x 5 = 40 9 x 5 = 45 10 x 5 = 50 10 .. Exercice 11 Créer un script permettant d'afficher la liste des fichiers du répertoire /etc accessibles en lecture puis la liste des fichiers accessibles en écriture. Exercice 12 Créer un script nommé "table" permettant d'afficher des tables de multiplication.ISET MEDENINE     [2011-2012] "Un" contient "Première ligne" "Deux" contient "Deuxième ligne" . "cinq" contient "cinquième ligne" Vérifier que le répertoire à créer n'existe pas déjà auquel cas il ne sera pas recréé mais les fichiers si.
Copyright © 2024 DOKUMEN.SITE Inc.