Scripts shell faciles Gazette Linux n°133 - Décembre 2006 par Blessen Cherian (

Scripts shell faciles Gazette Linux n°133 - Décembre 2006 par Blessen Cherian (Copyright © 2006) blessen@poornam.com traduction par Azibi Mounia (tous droits réservés) Introduction Les scripts shell sont des suites de commandes, exécutées par séquences. L'écriture et l'exécution des scripts shell se fait en plusieurs étapes : Étape 1: Ouvir le fichier dans un éditeur (par exemple "vi" ou "pico".). vi PremierScriptShell.sh Étape 2: Tous les scripts shell doivent commencer par "#!/bin/bash" ou n'importe quel autre shell vous préférez. Cette ligne est appelée shebang, et même si elle ressemble à un commentaire elle n'en est pas un : elle indique au shell de l'interpéteur que le fichier est un script. Le chemin fourni doit être absolu (on ne peut, par exemple, pas utiliser "bash"). Le shebang doit être en première ligne du script, sans espace qui le précède. Étape 3: Écrire le code que vous voulez développer. Notre premier script shell , que nous placerons dans le fichier "PremierScriptShell.sh", affichera l'habituel "Hello World".. #!/bin/sh echo "Hello World" Étape 4: La prochaine étape est de rendre le script exécutable en utilisant la commande "chmod". chmod 744 PremierScriptShell.sh ou chmod +x PremierScriptShell.sh Étape 5: Exécuter le script. Elle peut être faite en entrant le nom du script dans la ligne de commande, précédée par son chemin. S'il est dans le répertoire courant, c'est très simple : bash$ ./PremierScriptShell.sh Hello World Si vous voulez voir l'exécution étape par étape (ce qui peut être très utile en cas de bug), il faut lancer le script en ajoutant l'option "-x" : sh -x PremierScriptShell.sh + echo 'Hello World' Hello World Pour voir le contenu d'un script, vous pouvez utilisez la commande "cat" ou encore l'ouvrir dans n'importe quel éditeur de texte: bash$ cat PremierScriptShell.sh #!/bin/sh echo Hello World Les commentaires dans le shell Dans les scripts shell, toutes les lignes commençant par # sont des commentaires. # Ceci est une ligne de commentaire. # Ceci en est une autre. Il peut aussi y avoir des commentaires sur plusieurs lignes, pour cela il suffit d'utiliser ":" suivi d'une apostrophe : : 'Ceci est un ligne de commentaire. Encore une ! Et celle ci aussi en est une ! ' Remarque : Cette méthode ne fonctionnera pas s'il y a une apostrophe dans les lignes de commentaires. Variables Comme vous devez le savoir, ou pas, les variables sont la partie la plus significative de n'importe quel langage, que ce soit Perl, C ou les scripts shell. Dans le shell, les variables sont classées en deux types : les variables système et les variables définies par l'utilisateur. Variables système Les variables système sont définies et enregistrées dans l'environnement du shell parent (le shell à partir duquel le script est exécuté). Ces variables sont aussi appelées variables d'environnement. Elles sont écrites en lettres capitales et peuvent être affichées en utilisant la commande "set". Voici quelques exemples de variables système : PWD, HOME, USER, etc. Leurs valeurs peuvent être affichées individuellement en utilisant la commande "echo". Par exemple, echo $HOME nous permettra de voir la valeur stockées dans la variable système HOMME. Pour mettre à jour ou créer une variable système, il faut utiliser la commande "export" pour la rendre accessible aux shell fils (les shell lancés à partir du shell courant, y compris les scripts): bash$ SCRIPT_PATH=/home/blessen/scriptshell bash$ export SCRIPT_PATH Les shells modernes permettent de faire ceci en en ligne de commande : bash$ export SCRIPT_PATH=/home/blessen/scriptshell Variables utilisateurs Ce sont les variables utilisées habituellement dans les scripts, celles qui ne sont pas rendues accessibles à d'autres programmes. Leurs noms ne peuvent pas commencer par un chiffre et sont écrites en lettres minuscules avec des tirets bas. Par exemple : "def_vartemp". Pour assigner une valeur à une variable, il faut écrire le nom de la variable suivi de "=" et la valeur (par exemple : "def_valtemp=blessen"). Il ne doit y avoir aucun espace autour du signe égal. Pour utiliser ou afficher la variable, il faut utiliser la commande "echo" et précéder la variable du signe "$" : bash$ echo $def_valtemp blessen Le script qui suit définit la variable "username" et affiche sont contenu quand il est exécuté. #!/bin/sh username=blessen echo "Le nom d'utilisateur est $username" Les arguments en ligne de commande Ce sont des variables contenant les arguments d'un script quand il est exécuté. Ces variables sont accessibles avec $1, $2,...,$n, avec $1 le premier argument passé en ligne de commande, $2 le second, etc. Les arguments sont séparés par des espaces. $0 est le nom du script. La variable $# affiche le nombre d'arguments fournis, ce nombre est limité à 9 dans les anciens shell et est pratiquement illimité dans ceux modernes. Considérons un script qui prends deux arguments et les affiche. Nous l'appelerons "lignecommande.sh". #!/bin/sh echo "La première variable est $1" echo "La seconde variable est $2" Quand j'exécute "lignecommande.sh" avec des arguments comme "blessen" et 'lijoe", le résultat est : bash$ ./lignecommande.sh blessen lijoe La première variable est blessen La seconde variable est lijoe Variable de statut de fin Cette variable permet de savoir si la dernière commande exécutée a réussi ou non. Elle est représentée par $?. Une valeur de 0 signifie que la commande a été exécutée avec succès, tout autre nombre indique qu'il y a eu échec (certains programmes, comme mail, renvoient cependant d'autres chiffres que 0 pour indiquer le statut plutôt qu'un échec). C'est très utile pour les scripts. Pour tester cela, créez un fichier "test" en exécutant touch test. Puis affichez le contenu du fichier. bash$ cat test Vérifiez la valeur de $?. bash$ echo $? 0 La valeur est 0 car la commande a été exécutée avec succès. Essayez maintenant de lancer "cat" sur un fichier qui n'existe pas : bash$ cat xyz1 bash$ echo $? 1 La valeur 1 montre que la commande ci-dessus a échoué. La portée d'une variable Je suis sûr que la plupart des programmeurs ont appris (et sûrement travaillé avec) les variables et le concepte de portée (c'est une définition du contexte dans lequel la variable est définie). Dans la programmation shell, on utilise aussi la portée d'une variable pour plusieurs tâches, même si c'est rarement nécessaire, cela peut être un outils utile. Dans le shell, il y a deux types de portée : globale et locale. Les variables locales sont définies en utilisant le mot clef "local" avant le nom de la variable lors de sa définition ; toutes les autres variables, sauf celles associées aux arguments des fonctions, sont globales et donc accessibles partout dans le script. Le script ci-dessous montre les différentes portées d'une variable locale et d'une autre globale : #!/bin/sh affiche() { local local_var=100 global_var=blessen echo "La variable locale est $local_var" echo "La variable globale est $global_var" } echo "======================" affiche echo "======= dehors ========" echo "La variable locale en dehors de la fonction est $local_var" echo "La variable globale en dehors de la fonction est $global_var" L'exécution du script donne : ====================== La variable locale est 100 La variable globale est blessen =======outside ======== La variable locale en dehors de la fonction est La variable globale en dehors de la fonction est blessen Notez l'absence de valeur pour la variable locale en dehors de la fonction. Entrée et sortie dans les scripts shell Pour accepter les entrées avec le clavier, on utilise read. Cette commande va lire les valeurs entrées sur le clavier et les assigner à chaque variable spécifiées. read <variable_name> Pour les sorties, on utilise la commande echo. echo "phrase à afficher" Les opération arithmétiques dans les scripts shell Comme les autres langages de scripts, le shell permet aussi d'utiliser les opérations arithmétiques telles que l'addition, la soustraction, la multiplication et la division. Pour les utiliser, il faut faire appel à la fonction expr. Par exemple "expr a + b" signifie "ajouter a et b". Exemple : somme=`expr 12 + 20` La syntaxe est similaire pour les opération de soustraction, division et multiplication. Il y a un autre moyen de faire des opérations arithmétiques ; entourer les variables et l'équation par des crochets précédés d'un signe $ : $[expression operation instruction] Exemple : echo $[12 + 10] [Notez que cette syntaxe n'est pas universelle, elle échouera par exemple dans le shell Korn. La syntaxe '$((...))' est plus adaptée, indifféremment du shell ; cependant il vaut mieux, sur le principe général de "laisser le shell faire ce qu'il fait de mieux et laisser le reste aux outils standards", utiliser un programme de calcul comme "bc" ou "dc" et la substitution de commande. Aussi, notez que l'arithmétique en shell se faire sur les entiers uniquement, alors que les deux méthodes ci-dessus n'ont pas ce problème. -- Ben] Les instructions conditionnelles Amusons-nous un peu avec une instruction conditionnelle comme "if condition". La plupart du temps, nous programmeurs shell, nous retrouvons dans des situations où nous devons comparer deux variables, et après exécuter certaines instructions dépendant de la véracité de la condition. Donc, dans de tels cas, on utilise l'instruction "if". La syntaxe est la suivante : if [ instruction conditionnelle ] uploads/Industriel/ scripts-shell-faciles.pdf

  • 28
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager