Docsity
Docsity

Prepare for your exams
Prepare for your exams

Study with the several resources on Docsity


Earn points to download
Earn points to download

Earn points by helping other students or get them with a premium plan


Guidelines and tips
Guidelines and tips

un outil essentiel pour interagir avec les systèmes informatiques via des commandes textue, Summaries of Operating Systems

un outil essentiel pour interagir avec les systèmes informatiques via des commandes textuelles.

Typology: Summaries

2021/2022

Uploaded on 02/10/2024

m1245m
m1245m 🇲🇦

2 documents

1 / 214

Related documents


Partial preview of the text

Download un outil essentiel pour interagir avec les systèmes informatiques via des commandes textue and more Summaries Operating Systems in PDF only on Docsity! Chapitre | 8 2 2 ee Les langages de commande SHELL 2 Plan du chapitre 1. Introduction 2. Commandes internes et externes 3. Les variables 4. Redirections élémentaires 5. Groupement de commandes 6. Code de retour 7. Structures de contrôle 8. Chaînes de caractères 9. Commandes composées 10. Entiers et expressions arithmétiques 11. Tableaux 12. Alias 13. Fonctions Shell 5 Shells 2 principales familles  « Bourne shell » la syntaxe des commandes est proche de celle des premiers UNIX (/bin/sh ).  « C shell » la syntaxe est proche du « C » (/bin/csh ).  Il existe plusieurs interpréteurs de commandes. Historiquement, le premier a été écrit par S. R. Bourne. Il est donc souvent nommé Bourne Shell. Puis le csh a été écrit à Berkeley. ksh, bash (Linux) et vsh sont encore d’autres versions. 6 shells sous Linux Il existe sous Linux quelques variations ; les deux principales sont :  « Bourne Again Shell » ou bash correspond au Bourne shell augmenté de la plupart des fonctionnalités avancées du C shell (/bin/bash ). le shell par défaut sous LINUX est bash. Bash étant un sur−ensemble du Bourne shell, un script Bourne shell sera correctement interprété avec un Bash.  « Tcsh » C’est une extension du C shell d’origine ( /bin/tcsh ) 7 Les Shells : aspect environnement de travail  le rappel des commandes précédentes (gestion de l’historique) ;  la modification en ligne du texte de la commande courante (ajout, retrait, remplacement de caractères) en utilisant les commandes d’édition de l’éditeur de texte vi ou emacs.  la gestion des travaux lancés en arrière-plan (appelés jobs) ; ceux-ci peuvent être démarrés, stoppés ou repris suivant les besoins.  l’initialisation adéquate de variables de configuration (chaîne d’appel de l’interpréteur, chemins de recherche par défaut) ou la création de raccourcis de commandes (commande alias). Exemple : 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. Cette chaîne d’appel peut être relativement longue. douzi@machineUnix:/bin$ douzi@machineUnix:/bin $ PS1='$ ' $ pwd /bin => pwd affiche le chemin absolu du répertoire courant $ 10 Inconvénients des Shells  issus d’Unix, système d’exploitation écrit à l’origine par des développeurs pour des développeurs, les shells utilisent une syntaxe « ésotérique » d’accès difficile pour le débutant.  l’oubli ou l’ajout d’un caractère espace provoque facilement une erreur de syntaxe.  bash possède plusieurs syntaxes pour implanter la même fonctionnalité, comme la substitution de commande ou l’écriture d’une chaîne à l’écran.  certains caractères spéciaux, comme les parenthèses, ont des significations différentes suivant le contexte. 11 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 : $ ps 12 Commande interne et externe 15 Commandes internes (1) Attention : Selon le shell utilisé, les commandes internes peuvent être différentes. Exemple : $ type cd cd is a shell builtin $ la commande type indique que cd est une commande intégrée au shell. Certaines commandes internes possèdent une page au manuel spécifique. Pour les autres vous devez vous reporter aux pages de manuel concernant le shell lui−même. 16 Commandes internes (2) après exécution de la commande cd /tmp on obtient : Il n’y a pas eu de création de sous−processus, mais le shell a modifié lui−même un des paramètres de son environnement. 17 Commandes externes (1) Une commande externe est un fichier exécutable. Le shell recherche ce fichier exécutable dans chacun des répertoires spécifiés par la variable PATH. Pour traiter une commande, le shell crée un sous−processus. Cette commande ne peut donc en aucun cas modifier l’environnement du processus. 20 En Résumé Voici un schéma qui représente l’exécution d’une commande par le shell, suivant que cette dernière est externe ou interne. 21 Modes d’exécution d’une commande Exécution séquentielle (1)  Le mode d’exécution par défaut d’une commande est l’exécution séquentielle : le shell lit la commande entrée par l’utilisateur, l’analyse, la prétraite et si elle est syntaxiquement correcte, l’exécute. Une fois l’exécution terminée, le shell effectue le même travail avec la commande suivante.  L’utilisateur doit donc attendre la fin de l’exécution de la commande précédente pour que la commande suivante puisse être exécutée : on dit que l’exécution est synchrone.  Si on tape la suite de commandes : $ sleep 3 entrée date entrée où entrée désigne la touche entrée, l’exécution de date débute après que le délai de 3 secondes se soit écoulé. 22 Modes d’exécution d’une commande Exécution séquentielle (2)  Pour lancer l’exécution séquentielle de plusieurs commandes sur la même ligne de commande, il suffit de les séparer par un caractère ;  25 Exécution en arrière-plan (2)  Dans l’exemple ci-dessous, la commande sleep 5 est lancée en arrière-plan. Le système a affecté le numéro d’identification 696 au processus correspondant tandis que bash a affecté un numéro de travail (ou numéro de job) égal à 1 et affiché [1]. 26 Exécution en arrière-plan (3)  Ainsi, outre la gestion des processus spécifique à Unix, bash introduit un niveau supplémentaire de contrôle de processus. En effet, bash permet de stopper, reprendre, mettre en arrière-plan un processus, ce qui nécessite une identification supplémentaire (numéro de job).  L’exécution en arrière-plan est souvent utilisée lorsqu’une commande est gourmande en temps CPU (ex : longue compilation d’un programme). 27 Commentaires  Un commentaire débute avec le caractère # et se termine avec la fin de la ligne. Un commentaire est ignoré par le shell.  Pour que le caractère # soit reconnu en tant que début de commentaire, il ne doit pas être inséré à l’intérieur d’un mot ou terminer un mot. 30 Fichiers shell (3)  Seule la permission r est possédée par l’utilisateur. Pour ajouter la permission x au propriétaire du fichier fich, on utilise la commande : chmod u+x fich   Si on exécute premier en l’état, une erreur d’exécution se produit.  Cette erreur se produit car bash ne sait pas où se trouve le fichier premier. 31 Fichiers shell (4)  Le répertoire dans lequel se trouve le fichier premier (répertoire /home/sanchis) n’est pas présent dans la liste de PATH.  Pour que le shell puisse trouver le fichier premier, il suffit de mentionner le chemin permettant d’accéder à celui-ci.  Pour éviter d’avoir à saisir systématiquement ce chemin, il suffit de modifier la valeur de PATH en y incluant, dans notre cas, le répertoire courant (.). 32 Génération de noms de fichiers  Certains caractères spéciaux sont interprétés par le shell, et permettent de décrire les noms de fichiers. Ce sont des métacaractères (c'est à dire des caractères utilisés pour décrire d'autres caractères) : – Le caractère '*' signifie n'importe quelle chaîne de caractères. – Le caractère '?' signifie n'importe quel caractère. – Les crochets '[]' signifient un caractère appartenant à un ensemble de valeurs décrites dans les crochets. – Le caractère ‘-‘ utilisé avec les crochets permet de définir un intervalle, plutôt qu'un ensemble de valeurs. – Le caractère '!' utilisé entre crochets en première position, signifie tout caractère excepté ceux spécifiés entre crochets. – [:upper:] (majuscules) – [:lower:] (minuscules) – [:digit:] (chiffres, 0 à 9) – [:alnum:] (caractères alphanumériques). 35 Expressions régulières (1)  Pour que bash, interprète les expressions régulières, il est nécessaire que l’option extglob de la commande interne shopt soit activée.  Pour activer une option de la commande interne shopt on utilise la commande : shopt –s opt. Pour activer le traitement des expressions régulières par le shell : shopt –s extglob 36 Expressions régulières (2)  Les expressions régulières de bash sont : – ? (liste_modèles) : correspond à 0 ou 1 occurrence de chaque modèle – * (liste_modèles) : correspond à 0,1 ou plusieurs occurrences de chaque modèle – + (liste_modèles) : correspond à au moins 1 occurrence de chaque modèle – @ (liste_modèles) : correspond exactement à 1 occurrence de chaque modèle – ! (liste_modèles) : correspond à tout sauf aux modèles mentionnés 37 Substitution de paramètres 40 Les variables Par exemple, i=2, i=0002, i=deux n’ont pas la moindre signification de valeur pour le shell, et sont donc pour lui des affectations différentes. Le shell a donc besoin d’utilitaires pour manipuler les nombres (tester, additionner ...) ainsi que les chaînes de caractères : Les variables shell ne sont pas typées. 41 Les variables Le contenu Il s’agit de la récupération du contenu de la variable. Le shell interprète d’abord les variables, puis la commande qu’il trouve en première position sur la ligne. 42 Variable non définie Une variable non définie a une valeur nulle. Cela permet d’utiliser une variable alors qu’on ne l’a jamais affectée Pour bien limiter le nom de la variable de son contenu, on l’encadre entre accolades ({}). 45 Substitution de commande (1) Il est possible de faire exécuter une commande et d’en récupérer le résultat dans une variable. Cela se fait en encadrant une commande par des quotes inverses ou accents graves ‘‘ ou des parenthèses. Dans ce cas, on substitue la commande par sa sortie standard ; c’est−à−dire que l’on exécute la commande se trouvant entre ‘‘, puis le shell interprète la ligne de command 46 Substitution de commande (2)  Une commande à exécuter entre ‘‘ ou entre () : La substitution de commande permet l’exécution d’une commande interne, externe ou même d’un fichier de commandes. 47 Ordre d’interprétation Voici l’ordre et ce qu’interprète le shell : Le contenu de la variable sera substitué puis on exécute la commande. Dans le premier cas on exécute date, alors que dans le second on affiche la date au moment de l’affectation dans j (valeur statique). 50 Si vous modifier ce fichier, pour que ces modifications soient prises en compte sans se déconnecter, il faudra taper : Le premier ’.’ est une commande interne du shell, le deuxième fait partie du nom de fichier. Cette commande interne permet de lancer une procédure en modifiant l’environnement du père (pas de création d’un sous− processus). On peut également utiliser la commande « alias » pour personnaliser le nom des commandes connues. Exemple : 51 La portée des variables (1) Une variable shell est une donnée interne au programme. Par conséquent, elle n’est vue que dans le shell dans lequel elle a été définie. C’est−à−dire qu’une variable ne sera pas connue des processus fils. Afin de pouvoir transmettre une variable à tous ses fils, le shell devra l’exporter. La commande export transmet une (ou plusieurs) variable(s) à ses fils. On exporte le nom de la variable et son contenu sera recopié dans tous les processus fils. La portée des variables (2) S a>=2 S echo Sa = s dans ce niveau a—2> 3 b=3 S export b Ss om cree une mouvrelle warsable ect om la tramsmets & tous les fils echo Sa HAA F AWA A mows rerournens au pére S echo Sb Ss Modifier um fils ne modifie pas le pére ! 52 55 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), on utilise la syntaxe : declare –r nom=valeur [ nom=valeur … ]  On dit que la variable mess possède l’attribut r.  Pour connaître la liste des constantes définies : declare –r 56 Les fichiers d’environnement On peut classer les types de shell existant dans chaque famille, de la façon suivante : Bash Shell de login inreracrif /ete/profile Mis—a—jour par l*administrateur systeme, il est execute aA chaque login de tous les utilisateurs de la machine. SHOMES.bash_profile Appartenant Aa l*utilisateur, il est cxecute a chaque login de leutilisateur correspondant. SHOMIE?/.profile Si le fichier bash _profile mv’existe pas. ce fichier .profile sera utilisé a la place. Shell interactif SHOME/’.bashre Appartenant a Vutilisateur, il est exécuté A chaque instance de bash lanecée par Vutilisateur en dehors de celle du login. PS: Dans le fichier .bash_profile on peut mettre la commande suivante "$ source ~/.bashre". Dans ce cas méme le shell de démarrage (login) disposera @un environnement identique a ceux des shell interactifs. 57 60 Exécution d’une procédure Il y a plusieurs manières d’exécuter une procédure shell parmi lesquelles : utiliser la commande interne ’.’, qui permet de lire et d’exécuter les commandes se trouvant dans le fichier procédure, sans créer de sous−processus. $ . p1 wed Jul 6 11:07:45 MET 1994 philip term/c0 Jul 6 10:30 fun term/c5 Jul 6 09:06 c1 term/c4 Jul 6 09:14 /dev/term/c4 $ Dans ce cas, aucun processus n’est créé pour lire et lancer ces commandes, mais de toutes façons trois processus sont créés par ce script. 61 Paramètres positionnels(1) Si une procédure est exécutable, on peut l’appeler comme les autres commandes externes, c’est−à−dire mettre le nom de cette procédure au début de ligne et la faire suivre d’arguments : $ p1 arg1 arg2 arg3 La procédure trouve les arguments d’appel dans des pseudo−variables, appelées paramètres positionnels, dont les noms sont $0, $1; $2 ... $9. • En fait ce ne sont que des valeurs, en effet un nom de variable ne peut pas commencer par un chiffre. • L’assignation de valeurs à des paramètres de position s’effectue : - soit à l’aide de la commande interne set - soit lors de l’appel d’un fichier shell ou d’une fonction shell. 62 Paramètres positionnels (2) La procédure ne peut jamais initialiser le contenu de ces variables, mais peut le consulter en utilisant la syntaxe $0, $1, $2, ... $9. Chaque paramètre positionnel contient un mot de la ligne de commande. Exemple : $ P1 X Y Z Attention : Si la ligne contient des méta−caractères, le shell les substitue avant d’effectuer le découpage en mots, et d’affecter ces mots aux paramètres positionnels. 65 Variables automatiques (2) Remarque : en utilisant la variable $, on peut créer des fichiers temporaires de noms uniques : $ echo $$ 1254 $ >file$$ $ ls file* file1254 $ $! contient le numéro de processus de la dernière commande lancée en mode asynchrone (arrière−plan). 66 Variables automatiques (3) Remarque : très utile pour terminer le dernier processus lancé en mode asynchrone, sans avoir à exécuter la commande ps. $ kill $! $ Une fois qu’une commande a été lancée en mode asynchrone, $! contient une valeur. Elle la conserve même si la commande associée s’est terminée. Exemple : $ cat p3 date sleep 2 ps −f echo "0=$0 1=$1 2=$2 3=$3 4=$4 5=$5"² echo "#=$# *=$* !=$! $=$$"² $ ls −l p3 −rw−r−−r−− 1 jmr ens 115 Nov 16 10:07 p3 $ . p3 abc xyz 123 Mon May 20 11:45:20 MET DST 1995 PID TTY STAT TIME COMMAND 56 v01 S 0:01 −bash 112 v01 S 0:00 \_ ps −f 0=−bash 1=abc 2=xyz 3=123 4= 5= #=3 *=abc xyz 123 !=95 $=56 $ $ chmod u+x p3 $ ls −l p3 −rwxr−−r−− 1 jmr ens 115 Nov 16 10:07 p3 $ p3 abc xyz 123 Mon May 20 11:46:32 MET DST 1995 PID TTY STAT TIME COMMAND 56 v01 S 0:01 −bash 112 v01 S 0:00 \_ −bash 115 v01 R 0:00 \_ ps −f 0=./p3 1=abc 2=xyz 3=123 4= 5= #=3 *=abc xyz 123 !=95 $=112 $ 67 Variables automatiques * et @ (1)  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 "$@") : – "$*" est remplacée par "$1 $2 ... " – "$@" est remplacée par "$1" "$2" ... 70 Paramètres non définis  Trois cas peuvent se présenter lorsque le shell doit évaluer un paramètre : – le paramètre n’est pas défini, – le paramètre est défini mais ne possède aucune valeur (valeur vide), – le paramètre possède une valeur non vide.  Lorsque l’option nounset de la commande interne set est positionnée à l’état on (commande set -o nounset), bash affiche un message d’erreur quand il doit évaluer un paramètre non défini. 71 Suppression de variables  Pour rendre indéfinies une ou plusieurs variables, on utilise la commande interne unset. Syntaxe : unset var [ var1 . . . ]  Une variable en « lecture seule » ne peut être supprimée par unset. 72 Redirections élémentaires 75 Redirection de la sortie standard  Le shell prétraite une commande avant de l’exécuter : dans l’exemple ci-dessous, le shell crée un fichier vide f devant recevoir les résultats de la commande (ici inexistante) ;  l’unique effet de >f sera donc la création du fichier f ou sa remise à zéro. 76 Redirection de la sortie standard pour les messages d'erreur : 2> fichier (1)  On ne doit laisser aucun caractère espace entre le chiffre 2 et le symbole >.  Le fichier spécial /dev/null est appelé « poubelle » ou « puits » car toute sortie qui y est redirigée, est perdue. En général, il est utilisé lorsqu’on est davantage intéressé par le code de retour de la commande plutôt que par les résultats ou messages d’erreur qu’elle engendre.  Comme pour la sortie standard, il est possible de concaténer la sortie standard pour les messages d’erreur d'une commande au contenu d'un fichier : 2>> fichier 77 Redirection de la sortie standard pour les messages d'erreur : 2> fichier (2)  Pour rediriger la sortie standard pour les messages d’erreur vers la sortie standard (c.a.d vers le fichier de descripteur 1), on utilisera la syntaxe : 2>&1  Cela est souvent utilisé lorsqu’on désire conserver dans un même fichier toutes les sorties. 80 Redirections séparées des entrées / sorties standard (1)  Les entrées / sorties peuvent être redirigées indépendamment les unes des autres.  Dans cet exemple, la disposition des redirections dans la ligne de commande n’a pas d’importance, car les deux sorties ne sont pas redirigées vers le même fichier.  Il est possible de placer les redirections où l'on souhaite car le shell traite les redirections avant d'exécuter la commande 81 Redirections séparées des entrées / sorties standard (2)  La plupart des commandes affichent leurs résultats sous la même forme, suivant que l’on passe en argument le nom d’un fichier ou que l’on redirige son entrée standard avec ce fichier.  Il n’en est pas ainsi avec la commande wc : celle-ci n’écrit pas les résultats de la même manière. 82 Fermeture des entrées / sorties standard :  Fermeture de l’entrée standard : <&-  Fermeture de la sortie standard : >&-  Fermeture de la sortie standard pour les messages d’erreur : 2>&-  Il y a fermeture de la sortie standard puis une tentative d’écriture sur celle-ci : l’erreur est signalée par l’interpréteur de commandes. 85 Groupement de commandes 86 Groupement de commandes (1) { suite_cmds ; }  Le shell fournit deux mécanismes pour grouper l’exécution d’un ensemble de commandes sans pour cela affecter un nom à ce groupement : – l’insertion de la suite de commandes entre une paire d’accolades – l’insertion de cette suite de commandes entre une paire de parenthèses.  { suite_cmds ; } : Insérée entre une paire d’accolades, la suite de commandes est exécutée dans le shell courant. Cela a pour effet de préserver les modifications apportées par la suite de commandes sur l’environnement du processus courant. 87 Groupement de commandes (2) { suite_cmds ; }  S’exécutant dans le shell courant, les modifications apportées aux variables sont également conservées :  Les accolades { et } sont deux mots-clé de bash ; suite_cmds ne doit pas « coller » l’accolade ouvrante {. Par contre, la présence ou absence d’un caractère espace entre le caractère ; et le mot-clé } n’a aucune importance. 90 Groupement de commandes (5) { suite_cmds ; }  Comme pour toutes commandes composées, lorsque plusieurs redirections de même type sont appliquées à la même suite de commandes, seule la redirection la plus proche est effective.  Les commandes read lig1 et read lig3 lisent le contenu du fichier fich mais la commande read -p "Entrez votre ligne : " lig2 lit son entrée standard (/dev/tty). 91 Groupement de commandes (6) (suite_cmds )  Insérée entre une paire de parenthèses, la suite de commandes est exécutée dans un sous-shell.  L’environnement du processus n’est pas modifié après exécution de la suite de commandes.  Les parenthèses sont des opérateurs (et non des mots clé) : suite_cmds peut par conséquent coller une ou deux parenthèses sans provoquer une erreur de syntaxe. 92 Groupement de commandes (7) (suite_cmds )  Ce type de groupement de commandes peut être aussi utilisé pour effectuer une redirection globale. 95 Paramètre spécial ?  Le paramètre spécial ? (à ne pas confondre avec le caractère générique ?) contient le code de retour de la dernière commande exécutée de manière séquentielle (exécution synchrone).  Lorsque une commande est exécutée en arrière-plan (exécution asynchrone), son code de retour n'est pas mémorisé dans le paramètre spécial ?. 96 La commande interne deux-points (:)  La commande interne deux-points (:) sans argument retourne toujours un code de retour égal à 0.  Il en est de même avec la commande interne echo : elle retourne toujours un code de retour égal à 0, sauf cas particuliers. 97 Commande grep (1)  Cette commande affiche sur sa sortie standard l'ensemble des lignes contenant une chaîne de caractères spécifiée en argument, lignes appartenant à un ou plusieurs fichiers texte (ou par défaut, son entrée standard).  La syntaxe de cette commande est : grep [ option(s) ] chaîne_cherchée [ fich_texte1 ... ] Soit le fichier pass contenant les cinq lignes suivantes :
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved