Linux 6: Shell, scripts.
Transcription
Linux 6: Shell, scripts.
Plan Rappels Commandes internes du bash Commandes définies via le bash Linux 6: Shell, scripts. Pablo Arrighi∗ 11.05.04, Avon ∗ [email protected], IGM, Université de Marne-la-Vallée Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Rappels Commandes internes du bash Gestion des variables Autres Commandes définies via le bash Alias Fonctions Scripts Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Fichiers, variables Nous ne parlerons que du bash. Lors des leçons 2, 3 et 5 nous avons mentionné: I les fichiers de configuration du bash: /etc/profile, .bash profile, .bash login, .profile, .bashrc, .bash logout, le fichier pointé par la variable BASH ENV. I les variables importantes définies dans ces fichiers: PS1, PATH, HOME, LESS, PRINTER. . . Ces fichiers configurent le bash, ces variables sont gérées par le bash. Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Raccourcis Lors des leçons 2 et 3 nous avons mentionné: I les touches d’édition de commandes: <Ctrl-U>, <Ctrl-K>, <Ctrl-Y>; I les touches d’invocation des commandes passées: ↑, ↓, <Ctrl-R>; I la touche de complétion de commande et de nom de fichier: <tab>. Ces raccourcis sont des fonctionnalités du bash. Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Types de commandes Lors de la leçon 1 nous avons parlé du shell (coquille) comme interface avec le kernel (noyau). On distingue trois types de commandes: I les commandes externes au shell (qui créent un nouveau procéssus); I les commandes internes au shell (qui sont éxécutées par le procéssus bash lui-même); I les commandes définies via le shell (qui de fait sont une façon de renommer les précédentes). Donnés dans l’ordre croissant de priorité à l’éxécution. Le premier type de commande est décrit dans ce cours au hasard des chapitres. Les deux autres font l’objet de cette leçon. Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Gestion des variables Autres Les variables Pour toutes ces commandes il faut respecter la syntaxe des noms de variables: I chaı̂ne de caractère alphanumérique; I le premier caractère étant alphabétique; I le seul caractère non-alphanumérique autorisé est ‘ ’. Les variables sont: I soit internes au processus bash; I soit visibles par tous ses fils, on parle alors de variable d’environnement. Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Gestion des variables Autres Les variables Leur contenu inclut fréquemment des caractères spéciaux: I \h nom de l’ordinateur; I \u nom de login; I \t l’heure courante; I \w chemin de répertoire de travail; I \W nom du répertoire de travail; I \! numéro de la commande courante dans l’historique; I \$ # pour l’administrateur, $ sinon. E.g. PS1=’\u@\h: $PWD \’ correspond à l’invite de commande clementine@hector:/home/clementine $. Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Gestion des variables Autres Visualisation des variables Afin de visualiser le contenu de ces variables on utilise: I set permettant de lister toutes les variables de bash et leurs valeurs. I env ou printenv permettant de lister toutes les variables d’environnement et leurs valeurs. I echo $nomdevar permettant d’afficher la valeur d’une variable donnée. E.g. set HOME=/home/clementine PATH=/bin:/usr/bin:. ... Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Gestion des variables Autres Déclaration/assignation de variables internes Afin de créer une variable ou d’assigner à une variable existante on utilise: I declare option nomdevar, ce qui permet de spécifier un type pour une nouvelle variable; I typeset option nomdevar, absolument équivalent; I et/ou nomdevar=valeur, tout simplement et directement. E.g. typeset -a tab tab=(0 434 56) tab[0]=13 echo $tab[*] affiche tous les éléments. Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Gestion des variables Autres Utilisation des variables Comme on a pu le voir, $nomdevar désigne le contenu de la variable. On a aussi: I ${#nomdevar} la taille de la variable; I ${#tab[*]} le nombre d’éléments du tableau tab; I ${nomdevar:-valpardefaut} le contenu de la variable si il existe, sinon la valeur valpardefaut; I ${nomdevar:=valpardefaut} idem mais la valeur est en plus affectée à la variable; I . . . et autres astuces. E.g. TERM=${ TERM:-VT220 } Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Gestion des variables Autres Export de variables Afin de promouvoir une variable interne au statut de variable d’environnement: I declare -x nomdevar, s’il s’agit là d’une nouvelle variable; I ou export nomdevar, tout simplement. Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Gestion des variables Autres Destruction de variables Afin de détruire une variable: I unset nomdevar. E.g. unset tab echo $tab[*] donne une erreur. Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Gestion des variables Autres echo Permet d’afficher un texte. On dispose des options suivantes: I -n pas de retour à la ligne en fin d’affichage; I -e permet l’utilisation de caractères spéciaux. E.g. echo -e "ceci est un back slash \\". Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Gestion des variables Autres exit La commande exit provoque l’arrêt du shell, de même que <Ctrl-d>. Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Gestion des variables Autres read La commande read nomdevar1 nomdevar2 ... demande à l’utilisateur de saisir des valeurs séparées par des espaces, avant de les assigner aux variables énumérées. E.g. echo -n "Nom de fichier: " \; read fichier \; less $fichier. Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Gestion des variables Autres type La commande type nomcmd permet de savoir si nomcmd est une commande interne au shell ou bien une commande externe. Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Alias Fonctions Scripts Les alias Les alias permettent de définir une nouvelle commande en termes d’anciennes commandes, mais de façon très primitive: pas d’alias dans les alias, une seule ligne, pas de paramètres. . . Pour ce faire: I alias newcmd="old commands" créé l’alias newcmd pour symboliser ”old cmds”. I sans arguments alias énumère les alias définis à ce jour. I unalias newcmd supprime un alias précédemment créé. E.g. alias ls="echo bonjour" ls affiche bonjour. Pour défaire cela: unalias ls. Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Alias Fonctions Scripts Les fonctions Les fonctions permettent de définir une nouvelle commande en termes d’anciennes commandes, avec plusieurs lignes, des paramètres etc. Pour ce faire: I function nomdefonction { old commands; } I ou nomdefonction () {old commands; } Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Alias Fonctions Scripts Leurs paramètres Les paramètres sont contenus dans les variables spéciales $1, $2, . . . $9. De plus: I $# donne le nombre de paramètres; I $* donne la liste des paramètres. E.g. print () { echo $1 ; } Le même méchanisme s’applique aussi scripts. Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Alias Fonctions Scripts Le shell comme un langage Pour résumer le jeu d’instruction mis à disposition par le bash, inclut donc: I l’invocation des commandes externes et donc de tout programme éxécutable, avec passage de parmètres; I toutes les commandes internes d’appel au système Linux, de gestion des variables, d’entrée-sortie. . . I . . . mais encore des instructions conditionnelles et itératives. Ces dernières, combinées avec la possibilités de sauvegarder des instructions successives dans des fichiers éxécutables baptisés scripts, finissent de nous fournir un véritable language de programmation. Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Alias Fonctions Scripts Invocation des scripts Pour qu’un fichier soit considéré comme un script et soit éxécuté, on doit: I Utiliser la commande bash option nomdescript arg1 arg2... I ou appeler le script directement nomdescript arg1 arg2..., pourvu: I que la première ligne du script soit #!/bin/bash; I ou que le nom du fichier commence par un point (c’est ce qui est utilisé pour les fichiers d’initialisation du bash). Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Alias Fonctions Scripts Invocation des scripts Ne pas oublier de d’autoriser l’éxécution (chmod a+x nomdescript) du script. La solution du fichier avec en-tête est préférée. Pour le debugging, commencer le script par: set -x set -v. Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Alias Fonctions Scripts Branches if commande then commandes elif commandes elif commandes else commandes fi case chaine in motif1) commandes1 ;; motif2) commandes2 ;; ... E.g. if [ $ 1=="OK" ] then echo "ok dude." else echo "not ok dude". Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Alias Fonctions Scripts Boucles for variable in chaine1 chaine2...do ...done for variable in * do ...done for variable do ...done while command do ...done until command do ...done E.g. mot="" echo -n "mot de passe: " read mot while [ $ mot!=”abracadabra” ] do echo ”rate” read mot done Pablo Arrighi∗ Linux 6: Shell, scripts. Plan Rappels Commandes internes du bash Commandes définies via le bash Alias Fonctions Scripts Tests I mettre l’expression entre crochets [ . . . ] et utiliser == ou !=; I ou bien utiliser les commandes de test: -le / -gt / -o. . . . . . dont la syntaxe est peu commode. D’où l’usage fréquent de languages de script comme python ou perl. Pablo Arrighi∗ Linux 6: Shell, scripts.