Le jour où Microsoft inventera un truc qui ne plante pas, ce sera un clou !
   
Utile !
Updates/Nouveau
Articles
Linux Distributions Environnements
graphiques
Portails Tutoriels divers Propagande Divers
Soutien


 

(Anupaz)
Comprendre et réaliser des scripts Bash


EN TRAVAUX : incomplet et pas encore bien revu...





Un script est un fichier texte comprenant des commandes enchaînées linéairement. Il existe plusieurs type de language de scripts possibles (Bash, Perl, Python...)

Cet article vous expliquera les bases pour comprendre voire écrire des scripts Bash.

Aucune connaissance n'est exigée, si ce n'est la lecture de l'article sur la console .


Introduction

Tout d'abord à quoi bon faire des scripts ? Pour un tas de choses... L'utilisation et surtout l'administration d'un ordi demandent parfois d'automatiser des tâches ou bien de prendre des décisions. Un script est donc un programme en ligne de commande. Dans le cas le plus simple, cela revient à un enchaînement linéaire de commandes. Il est évident que les scripts peuvent faire beaucoup plus, ils ressemblent alors à de vrais programmes.

Les scripts peuvent inclure des variables (x=32), des
blocs conditionnels (si x=32 alors lance la commande Y) ou des blocs répétitifs (tant que x<31 lance la commande Y et reessaye le test) et même des 'modules'. Nous verrons quels usages faire de ces fonctionalités.

Le Shell est un interpréteur de commande : il est l'interface entre Linux et vous. Il existe de nombreux Shell mais le plus courant est le Bash. Il y a de bonne chance pour que cela soit celui par défaut dans votre console. Pour vérifier quel Shell utilise votre console, tapez dedans echo $­­­­­­­SHELL.

Pour ceux que cela interresse, il existe des languages de programmation beaucoup (oui beaucoup) plus évolués comme le C++, le Java, le Pascal... Ce n'est pas l'objet de cet article même si cela peut être un bon départ.


Ecriture et exécution du script

Pour écrire un script, ouvrez votre éditeur de texte favori. Sous KDE, je vous conseille Kate. La première commande à indiquer est le nom du language utilisé pour le script. Ainsi, tous les scripts Bash commencent par cette commande :

#!/bin/sh
Vous pouvez tout aussi bien mettre à la place
#!/bin/bash

Une fois le script écrit, sauvez le comme un fichier texte normal. Pour l'utiliser, il vaut mieux le rendre exécutable par la commande chmod :

$­­­­­­­­­ chmod +x /chemin/nom_du_script

puis l'exécuter par l'une de ces deux commandes :
  • $­­­­­­­­­ sh /chemin/nom_du_script
  • $­­­­­­­­­ ./chemin/nom_du_script
Si vous avez rendu le script exécutable, ces 2 méthodes fonctionnent, sinon, seule la 2èm marche. Enfin, un script exécutable peut se lancer par un clic de souris.

Notez que Bash se soucie fort peu du formatage (retour à la ligne, position spatiale etc) que vous lui fournissez. Par contre, la relecture d'un programme est facilitée si vous espacez, commentez et tabulez vos scripts...


Les variables

Généralités

C'est la base de la programmation. Une variable c'est un aide-mémoire électronique. Ainsi,
x=256 attribue la valeur 256 à la variable du nom de x . De même, x=y veut dire que x doit prendre la même valeur que y. Ce n'est donc pas une expression algèbrique mais un ordre d'assignation de valeur. C'est encore plus clair avec cet exemple x=x+1 qui augmente (on dit incrémenter) la valeur de x de 1. Ainsi, si x avait '5' pour valeur, il vaudra '6' après. Cette expression est évidemment une hérésie en algèbre mais tout à fait classique en programmation.

Une variable peut contenir une valeur :
  • numérique (exemples : 3.14, 152 ou -223).
  • alpha-numérique (du texte si vous préferez).
Attention, Bash ne type pas ses variables comme le ferait Basic ou C : une variable reste en définitive une chaîne de caractères même si elle contient des chiffres. Si la variable contient des chiffres, Bash autorise cependant des opérations mathématiques. Le non-typage des variables est un souci de moins mais attention : c'est vous qui devez vous rappeller de ce que vous mettez dans vos variables.

Attribution de valeur

Pour attribuer une valeur à une variable au sein d'un script Bash, il existe plusieurs manières :
  • prénom=Marie affecte la valeur 'Marie' à la variable prénom. Si jamais la valeur contient un espace alors mettez des doubles guillements. Exp : nom="Marie Curie". Attention, pas d'espace de part et d'autre du signe égal.
  • L'instruction let permet des substitutions au lieu de simples affectations. Ainsi pour incrémenter x de 2 on dira let x=x+2 . La syntaxe let x += 2 apporte le même résultat.
  • La commande read demande à l'utilisateur une entrée clavier. Ainsi read nom suspend le script le temps que l'utilisateur tape au clavier et valide par Entrée. La variable 'nom' contient alors l'entrée clavier.
  • Lorsque vous tapez un nom de script suivi d'option(s), ces options sont attribuées (ont dit passées) à des variables. J'y reviendrai.
  • Enfin, vous pouvez assigner le résultat d'une commande à une variable en l'entourant de guillement simple. Exemple : liste_fichier='ls'. Ceci passe le résultat de la commande ls à la variable liste_fichiers.
Caractères spéciaux

[...]

Utilisation de la variable

Pour utiliser la variable dans un script (c'est à dire extraire sa valeur), il suffit d'ajouter le signe $­­­­­­. Ainsi echo $­­­­­­nom affiche la valeur contenu dans la variable nom.

Si jamais la variable contenait des espaces (exemple nom="Marie Curie"), pour l'afficher correctement, il faut mettre des doubles guillemets :
echo "$­­­­­­nom" .


Exécutions conditionnelles

Les conditions

Par là, je veux dire que Bash est capable en fonction du résultat d'un test ou d'une valeur de variable d'exécuter une commande plutôt qu'une autre. C'est encore une base de la programmation.

Bash est un peu surprenant à ce sujet puisqu'il n'existe pas de booléens (vrai/faux).

Voici comment on écrit des conditions en Bash :



[...]


La structure if


Cette structure permet d'executer des commandes en fonction du résultat d'une expression ou d'une commande. Voici sa syntaxe :

if
condition A
then
commande B
else
commande C
fi

En gros, si (if) la condition A est vraie alors (then) la commande B est executée. Sinon (else), c'est la commande C qui sera lancée. Le mot clé fi clot la structure. Voici un exemple concret (à coller dans votre éditeur de texte) :

#!/bin/sh
echo "Entrez un nom d'utilisateur : "
read nom

if
who | grep $­­­­nom > /dev/null
then
echo "L'utilisateur $­­­­­­nom est connecté."
else
echo "L'utilisateur $­­­­nom est absent.".
fi

Explications : Après l'entrée clavier par read d'un nom d'utilisateur (variable nom), un test est effectué. La commande who sort tout les utilisateurs connectés. La commande grep permet de faire une recherche dans la sortie de la commande who (grâce au 'pipe', le symbole | ). On peut donc voir si la valeur de la variable nom est contenue dans la liste des utilisateurs connectés. La structure if/fi oriente alors vers telle ou telle commande selon le résultat. Notez que la portion > /dev/null permet de ne pas afficher dans la console les messages de la commande juste avant (en fait, elle redirige ces messages vers le néant).

La structure case

Elle permet aussi une exécution de commandes sous conditions mais sa syntaxe est un peu différente. Selon les cas, elle est avantageuse à if. Voici sa syntaxe :

case variable_X in
possibilité1) commande A ;;
possibilité2) commande B ;;
...
esac

Ici, un test est effectué sur le contenu de variable_x. Sa valeur est successivement comparée aux éventualités (possibilité1, 2...) que vous avez prévus dans le script. Si la valeur concorde, alors la ou les commandes en regard est lancée. Voici l'exemple concret que vous attendez :

#!/bin/sh
echo "Tapez sur une touche et validez : "
read touche
case $­­­touche in
a) echo "Vous avez appuyé sur la touche a" ;;
A) echo "Vous avez appuyé sur la touche A" ;;
b|B) echo "Vous avez appuyé sur la touche b ou B" ;;
*) echo "Vous avez appuyé sur autre chose que a, A, b et B" ;;
esac


La commande test

[...]


Exécutions répétées

Parfois vous aurez envie de répeter x fois une commande ou un bloc de commandes. On parle de boucle itérative.

La boucle for

[...]

La boucle while

Avec la boucle while, l'itération (la boucle si vous préférez) se poursuit tant que la condition testée reste vraie (ou fausse). Voici sa syntaxe :

while expression_A
do
commandeA
commandeB
...
done

Ainsi, tant que expression_A est vraie, le bloc de commande entre do et done est lu en boucle. La sortie de la boucle (au-delà du mot-clé done) ne survient que si expression_A n'est plus vraie. Attention donc à ne pas faire une boucle immortelle : il faut d'une manière ou d'une autre que la valeur de l'expression soit modifiée dans la boucle. Sinon, un CTRL+C devrait alors vous sauver... Exemple concret :

#!/bin/sh
x=0
while (( $­­­x<10 ))
do
let x=x+1
echo $­­­x
done
echo "Fin de la boucle"


Au début, on attribue à x la valeur de zéro, puis la boucle while se continue tant que x est inférieur à 10. On fait bien attention d'augmenter de 1 la valeur de x à chaque passage dans la boucle. Il arrive un moment où x vaut 10, l'entrée dans la boucle n'est alors plus possible.


Liens externes

Tutoriel complet.




Date de création : 17/05/2024 @ 21:47
Dernière modification : 27/03/2024 @ 21:56
Catégorie :
Page lue 596 fois


 Prévisualiser la page      Imprimer la page

Réactions à cet article


Réaction n°2 

par luteola le 30/08/2024 @ 23:49

salut

en vacances, j'ai pas mal bouquiné sur le sujet... C'est super interressant en fait. Je programmais en VB alors j'ai gardé le virus...

Dès que j'ai du temps, je completerais cet article. C'était prévu de toute façon.

Je t'enverrai un ptit mail qd ce sera updaté.

A bientôt.

nico


Réaction n°1 

par Tinformatique le 17/08/2024 @ 13:18

slt !

çà serait bien si tu pouvais continuer le tuto
çà m"aiderait

@++


News RSS du Libre
Recherche




Infos Site
Votre adresse IP : 72.20.99.46

247 Membres

Dernier inscrit :
linuxreloaded

Membre en ligne :
( personne )
Anonymes online: 15

Total: 128501  
Affluence record: 37
le 10/09/2024

Sondage
Quelle distribution utilisez vous le plus ?
 
Mandriva
Mepis
(k)Ubuntu
SuSE
Debian
Knoppix/Kaella
Xandros
Gentoo
Fedora
Autres
Résultats
Newsletter
Pour avoir des nouvelles de ce site, inscrivez-vous à notre Newsletter.
S'abonner
Se désabonner
131 Abonnés
Haut

  Site créé avec GuppY v4.5.14 © 2004-2005 - Licence Libre CeCILL

Document généré en 0.47 seconde