Shell bash
Un article de ChtilandWiki.
Le shell bash, comme les autres shells (korn shell, C shell), permet ce qui a été vu précédemment, c'est-à-dire de lancer des commandes, de créer des pipes, de connecter par pipes des commandes ... Mais avec les commandes décrites depuis le début de ce document et à l'aide d'une syntaxe proche de celle des langages de programmation courants comme le C ou le Pascal, on peut réaliser des scripts permettant d'automatiser certaines tâches. Nous n'allons pas décrire ici en détail ce language de programmation mais simplement montrer quelques exemples : gzip -dc fichier.tar.gz | tar xfBp - (on peut aussi utiliser uniquement les options de la commande tar pour réaliser ceci.) Il est assez pénible d'avoir à taper systématiquement cette longue commande. Un script bash peut simplifier les choses : #!/bin/bash gzip -dc $1 fichier.tar.gz | tar xfBp - n enregistre ensuite le fichier sous le nom "montar" puis on le rend exécutable grace à la commande suivante : chmod +x montar pour décompressez un fichier il vous suffira de taper ceci : montar fichier.tar.gz Quelques remarques :
#!/bin/bash
Voila qui simplifie déjà suffisamment la vie. Nous pourrions améliorer ce script en voyant d'abord de quoi est composé le fichier.tar.gz avant la décompression. #!/bin/bash tar tvzf $1 Il serait cependant plus utile de pouvoir accepter ou non le désarchivage du fichier selon les informations fournies par la commande tar tvzf : #!/bin/bash tar tvzf $1 La commande echo permet d'afficher un message sur la console, et l'option n permet de ne pas faire de retour chariot en fin de ligne. La commande read attend une réponse de l'utilisateur, ici la réponse sera stockée dans la variable archi. Les crochets ([ ]) encadrent tous types d'expression. Enfin, la condition if permet de tester la valeur de la réponse donnée par l'utilisateur. Voici la construction typique de l'instruction if : if condition then instruction else instruction fi Si vous souhaitez insérer plusieurs conditions "if" utilisez la syntaxe suivante : if condition then instruction elif condition then instruction else instruction fi Nous pourrions utiliser aussi un menu qui nous permettrait de choisir entre une décompression immédiate ou une visualisation du contenu de l'archive :
#!/bin/bash PS3='votre choix ?' select choix in "tar tvzf" "tar xvzf" do $choix $1; done
"choix" est le nom de la variable qui contiendra un des éléments de la suite qui suit le mot clé in. Dans notre cas, "choix" contiendra soit la chaîne "tar tvzf" ou la chaîne "tar xvzf". Dans la construction do... done, nous placons les commandes que nous voulons executer. Ici "$choix" contiendra donc soit "tar tvzf" soit "tar xvzf" et "$1" contiendra l'argument (ici le nom du fichier compressé) que l'on aura indiqué à l'execution de notre script. Si notre script s'appelle "ctgz", son exécution se déroulera ainsi :
[delcros@mistra binaire]$ ./ctgz fichier.tar.gz 1) tar tvzf 2) tar xvzf votre choix ? L'utilisateur n'a plus qu'à taper "1" ou "2".
select nom [in liste] do instructions utilisant la $nom done
Comme pour tout langage de programmation, bash contient des instructions de répétition : La boucle for permet de réaliser une instruction un nombre de fois précis. Sa syntaxe est très proche de celle de select : for nom [in liste] do instructions utilisant $nom done exemple :
#!/bin/bash for fichier in $@ do tar tvzf $fichier done
[delcros@mistra binaire]$ ./utgz5 fichier1.tar.gz fichier2.tar.gz La boucle while ainsi que la boucle until effectue la même chose que for à la différence que celle-ci répète une instruction tant que (while) ou jusqu'à ce que (until) une condition soit vérifiée. Voici un exemple avec la boucle until :
#!/bin/bash until tar tvzf $1; do echo "tentative de decompression" done
Avec ces quelques structures de contrôle on voit bien la simplification des tâches quotidiennes que bash peut permettre, au prix d'un effort réduit. La personnalisation des variables d'environnement : bash contient des variables qui permettent d'adapter son environnement à ses besoins : Il existe un fichier qui met en place une grande partie des variables d'environnement : le fichier .bash_profile (ou .profile). Pour que les variables d'environnement soit prises en compte vous devez vous reloguer sur votre compte(avec la commande "su - nom_utilisateur (si vous avez modifié le .bash_profile) ou alors passer les variables directement en ligne de commande (dans ce cas, les variables ne seront pas enregistrées dans le .bash_profile). Vous trouverez par exemple la variable PATH qui définit les chemins existant pour les exécutables. Si par exemple, votre chemin PATH est de la forme : PATH=$PATH:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin et que vous souhaitez ajouter dans ce chemin un répertoire /home/delcros/binaire qui contient votre script bash ou vos programmes personnels, il vous faudra ajouter ce chemin à la variable PATH : PATH=$PATH:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/home/delcros/binaire (notez la présence de ":" entre chaque nom de répertoire). La variable PS1 contient la forme de votre invite : PS1="[\u@\h \w]" affichera votre nom d'utilisateur (\u); "@"; le nom de la machine (\w); un espace; le répertoire de travail courant (\w). Voilà ce que cela donne : [delcros@mistra /usr/X11] Voici une autre configuration d'invite qui contient quasiment toutes les options possibles : PS1="[\t \d \u@\h \w \$]" ce qui donne : [21 : 47 : 13 Sun Apr 26 delcros@mistra /usr/X11 $] Une autre variable utile est MAIL. Normalement, vos mails arrivent dans le répertoire /var/spool/mail/nom_utilisateur Vous pouvez placer cette variable dans votre .bash_profile avec cette forme : MAIL=/var/spool/mail/nom_utilisateur Les alias Les alias sont une des choses les plus pratiques qui soient. Régulièrement on utilise les mêmes commandes avec parfois de nombreuses options. Les alias se placent habituellement dans le fichier de configuration .bashrc. Voici un exemple classique d'alias : alias l="ls --color=auto" Avec cet alias, vous n'aurez plus besoin de spécifier systématiquement l'option "--color" qui permet de lister en couleur le contenu d'un répertoire. Il vous suffira simplement de taper l'alias "l". Ainsi, le mini script que nous avions réalisé au début de cette section pourrait aussi se faire grâce à un simple alias : alias montar="tar xvzf" Afin de ne pas avoir à redéfinir l'alias à chaque ouverture de terminal (session), vous pouvez les ajouter directement dans ~/.bash..rc
|
|






