8
Quelques variables utiles $$ : affiche le numéro de processus (pid) du shell $! : affiche le pid de la dernière commande lancée en tâche de fond (avec &) $? : affiche la valeur retrounée par la dernière commande $ : affiche la liste des options avec lesquelles le shell a été appelé Les commandes composées (; | & || && $() {} ``) Les commandes qu'on a tapé jusque-là sont des commandes simples : une seule commande par ligne, les unes à la suite des autres. Bash permet de faire des commandes composées, c'est à dire plusieurs commandes sur la même lignes, qui vont influer les unes sur les autres. les commandes séquentielles Elles s'exécutent l'une après l'autre, exactement comme si on les avait mises sur deux lignes différentes. Le seul intérêt est d'avoir un code plus clair dans certains cas. On sépare simplement les commandes par un point-virgule. commande1 ; commande2 les commandes redirigées Le résultat de la commande1 est renvoyé à la commande2. syntaxe : commande1 | commande2 exemple : ps -aux | grep x Dans l'exemple, on va afficher tous les processus qui contiennent le caractère 'x'. les commandes en parallèle

Command Es

Embed Size (px)

DESCRIPTION

Commandes de langage de programmation shell

Citation preview

Quelques variables utiles $$: affiche le numro de processus (pid) du shell $!: affiche le pid de la dernire commande lance en tche de fond (avec &) $?: affiche la valeur retroune par la dernire commande $: affiche la liste des options avec lesquelles le shell a t appel Les commandes composes (; | & || && $() {} ``)Les commandes qu'on a tap jusque-l sont des commandes simples: une seule commande par ligne, les unes la suite des autres. Bash permet de faire des commandes composes, c'est dire plusieurs commandes sur la mme lignes, qui vont influer les unes sur les autres. les commandes squentiellesElles s'excutent l'une aprs l'autre, exactement comme si on les avait mises sur deux lignes diffrentes. Le seul intrt est d'avoir un code plus clair dans certains cas. On spare simplement les commandes par un point-virgule. commande1; commande2les commandes redirigesLe rsultat de la commande1 est renvoy la commande2. syntaxe: commande1 | commande2exemple: ps -aux | grep xDans l'exemple, on va afficher tous les processus qui contiennent le caractre 'x'. les commandes en parallleOn excute les deux commande1 et commande2 en parallle. Commande1 est excute en tche de fond. commande1 & commande2les commandes "OU exclusif"Commande2 est excute SI et seulement SI commande1 a chou. commande1 || commande2les commandes "ET exclusif"Commande2 est excute SI et seulement SI commande1 a russi. commande1 && commande2les commandes passes en paramtreCommande2 sert de paramtre commande1 syntaxe: commande1 $(commande2) OU commande1 `commande2`Le caractre ` s'obtient en faisant 'Alt-Gr + 7'. C'est l'apostrophe l'envers. les sries de commandesOn regroupe des commandes entre parenthses ou accolades. Contrairement aux accolades, les instructions entre parenthses se droulent dans un shell secondaire, indpendant du shell actuel. L'utilisation des accolades est donc plutt conseille. Avec les accolades, la dernire commande doit se terminer avec un point-virgule. { commande1; commande2; } OU ( commande1; commande2 )exemple: on affiche la date et la liste des fichiers, et on envoi le tout vers l'imprimante, plutt que vers l'cran. { date; ls -l; } | lprEcriture l'cran / lecture au clavier (echo / read)Ecriture l'cranL'criture l'cran est trs simple, et on l'a dj vue dans notre premier script. On utilise la commande 'echo' suivie du texte afficher. Le texte afficher peut tre entour de guillemets (") ou de ctes ('), mais a n'est pas obligatoire. ATTENTION: si on utilise les ctes, les variables (appeles avec $, voir partie 2 - les variables) ne seront pas remplaces par leur valeur; $variable sera considr comme un texte (voir exemple ci-dessous). Lecture au clavierLa lecture au clavier se fait avec la commande 'read'. La syntaxe est "read valeur" ou "read val1 val2 val3". Si on rentre une seule valeur, elle sera stocke dans la premire variable. Si on rentre plusieurs valeurs, spares par des espaces, alors la premire valeur ira dans la premire variable, la deuxime valeur dans la deuxime variable, et ainsi de suite. S'il y a plus de valeurs que de variables, la dernire variable contient toutes les dernires valeur. S'il y a plus de variables que de valeurs, les dernires variables seront vides. Si on ne prcise aucun nom de variable, la variable par dfaut est "REPLY". Le passage de paramtresLorsqu'on lance un script, plutt que de demander les paramtres aprs avec la commande read, on peut aussi les rentrer ds le lancement du script. On appelle a le passage de paramtres. La syntaxe est la suivante: ./script param1 param2 param3On a alors plein de variables qui nous permettent de rcuprer chaque paramtre, ainsi que leur nombre. $#: nombre de paramtres $*: affiche l'ensemble des paramtres $@: affiche l'ensemble des paramtres comme $*. La diffrence est que $* correspond une seule valeur, alors que $@ correspond autant de valeurs qu'il y a de paramtres $0: affiche le nom du script $1, $2, ..., $9, ${10}, ...: correspondent aux paramtres n1, 2, etc. Pour les paramtres plusieurs chiffres, il faut mettre les chiffres entre crochets. Les structures conditionnelles (if then else while until)gnralitsUne structure conditionnelle est une structure dans laquelle on effectue un test. Le script se comportera de faon diffrente en fonction du rsultat du test. On peut aussi raliser des boucles tant que le test est vrai. Les tests peuvent porter sur des fichiers (et/ou rpertoires), sur des entiers et sur des chaines de caractres. Leur syntaxe n'est pas la mme dans tous les cas. On peut aussi faire des combinaisons de tests. Il existe deux faons de faire les tests: soit entre crochets, soit avec la commande 'test'. SI [ tests ] ALORS ... SI test tests ALORS ...Attention ne pas oublier l'espace aprs le premier crochet, et avant le dernier! Tests sur les fichiers/rpertoiresVoici une liste des tests possibles sur les fichiers et/ou rpertoires: "-e fichier": vrai si le fichier/rpertoire existe. "-s fichier": vrai si le fichier une taille suprieure 0. "-r fichier": vrai si le fichier/rpertoire est accessible en lecture. "-w fichier": vrai si le fichier/rpertoire est accessible en criture. "-x fichier": vrai si le fichier est excutable ou si le rpertoire est accessible. "-O fichier": vrai si le fichier/rpertoire appartient l'utilisateur. "-G fichier": vrai si le fichier/rpertoire appartient au groupe de l'utilisateur. "-b nom": vrai si nom reprsente un priphrique (pseudo-fichier) de type bloc (disques et partitions de disques gnralement). "-c nom": vrai si nom reprsente un priphrique (pseudo-fichier) de type caractre (terminaux, modems et port parallles par exemple). "-d nom": vrai si nom reprsente un rpertoire. "-f nom": vrai si nom reprsente un fichier. "-L nom": vrai si nom reprsente un lien symbolique. "-p nom": vrai si nom reprsente un tube nomm. "fichier1 -nt fichier2": vrai si les deux fichiers existent et si fichier1 est plus rcent que fichier2. "fichier1 -ot fichier2": vrai si les deux fichiers existent et si fichier1 est plus ancien que fichier2. "fichier1 -ef fichier2": vrai si les deux fichiers reprsentent un seul et mme fichier. Tests sur les entiers "entier1 -eq entier2": vrai si entier1 est gal entier2. "entier1 -ge entier2": vrai si entier1 est suprieur ou gal entier2. "entier1 -gt entier2": vrai si entier1 est strictement suprieur entier2. "entier1 -le entier2": vrai si entier1 est infrieur ou gal entier2. "entier1 -lt entier2": vrai si entier1 est strictement infrieur entier2. "entier1 -ne entier2": vrai si entier1 est diffrent de entier2. Tests sur les chaines de caractresLes chaines doivent tre entoures par des guillemets. "-n "chane"": vrai si la chane n'est pas vide. "-z "chane"": vrai si la chane est vide. ""chaine1" = "chaine2"": vrai si les deux chanes sont identiques. ""chaine1"!= "chaine2"": vrai si les deux chanes sont diffrentes. Les combinaisons de testsLes combinaisons de tests sont utilises quand on doit faire plusieurs tests simultanment, c'est dire, quand on doit rpondre plusieurs conditions. On utilise les oprateurs && et || comme dans les commandes composes. L'oprateur! sert inverser la condition. SI test ALORS commandes FIN: excute les commandes si test est VRAI SI! test ALORS commandes FIN: excute les commandes si test est FAUX SI test1 && test2 ALORS commandes FIN: excute les commandes si test1 ET test2 sont vrais tous les deux SI test1 -a test2 ALORS commandes FIN: pareil de prcdemment, avec une autre notation SI test1 &&! test2 ALORS commandes FIN: excute les commandes si test1 est VRAI ET test2 est FAUX SI test1 || test2 ALORS commandes FIN: excute les commandes si test1 OU test2 sont VRAIS SI test1 -o test2 ALORS commandes FIN: pareil de prcdemment, avec une autre notation SI! { test1 || test2 } ALORS commandes FIN: excute les commandes si NI test1 NI test2 sont VRAIS structure SI ... ALORSLa syntaxe de cette structure est: if test; then action-1 action-2 ... action-n; fiIl faut bien mettre un point-virgule aprs le test et apr la dernire action. On termine la structure avec la commande fi. structure SI ... ALORS ... SINONLa syntaxe est: if test; then action1; else action2; fiSi le test est vrai, on excute l'action1 (ou le groupe d'actions1), sinon, on excute l'action2 (ou le groupe d'actions2). Bien mettre le point virgule aprs le test et chaque commande ou groupe de commandes. structure SI ... ALORS ... SINON SI ... ALORS ... SINONsyntaxe: if test1; then action1; elif test2; then action2; else action3; fi Si test1 est vrai, on excute l'action1, sinon, si test2 est vrai, on excute l'action2, sinon, on excute l'action3. Bien mettre le point virgule aprs chaque test et chaque commande ou groupe de commandes. structure TANT QUE ... FAIREIl existe deux commandes pour faire a: while et until. While va rpter la boucle tant que le test est vrai. Until va rpter la boucle jusqu' ce que le test soit vrai. La syntaxe des deux commandes est: while test; do action1 action2; done until test; do action1 action2; doneComme avec les structures prcdentes, on met un point-virgule aprs le test et aprs le groupe d'actions. Les autres structures (for in do case select)structure POUR chaque lment de la liste FAIRE ...Cette structure nous permet de faire une action pour chaque lment d'une liste. La liste peut tre donne directement, ou tre le rsultat d'une commande. Syntaxe: for element in liste_des_elements; do actions; doneOn met un point-virgule aprs la liste des lments et aprs le groupe d'actions. structure DANS chacun des cas suivants FAIRE ...Pour ce type de structure, on utilise la commande case. Cette commande est quivalente une srie de if ... elif ... elif ... elif ... else ... fi, mais apparait de faon beaucoup plus claire et lisible. Syntaxe: case valeur in cas_1) action_1;; cas_2) action_2;; cas_3) action_3;; *) action_sinon;;esacPour chaque possibilit, on a une action associe. Si aucun des cas n'est rencontr, c'est l'action par dfaut (correspondant "*)") qui est excute. Chaque action ou suite d'actions se termine par un double point-virgule. La structure se termine par "esac" ("case" crit l'envers).