Syntaxe
Dans un script les lignes de commentaires commencent par le symbole #. La première instruction indique le shell employé. Il est recommandé de ne pas l’omettre car cela peut créer des surprises.
Sa syntaxe est :
# !/bin/bash
ou un autre shell comme /bin/sh : Bourne shell, /bin/csh (C shell), /bin/ksh (Korne shell).
Tous les shells ne sont pas forcément disponibles sur une machine.
Si a désigne une variable $a est sa valeur.
Chaque ligne est interprétée avant d’être exécutée. Lorsqu’une chaîne de caractères est entourée des symboles ‘ ‘ (apostrophe simple) le mécanisme d’interprétation est inhibé. Lorsqu »elle est entourée des symboles " " (double quote) elle est interprétée puis exécutée.
Par exemple echo $a écrit sur l’écran la valeur de a
echo "$a" fait de même mais echo ‘$a’ écrit les caractères $a.
Une autre façon de procéder est l'usage de \ : le caractère qui le suit perd sa signification symbolique.
rm \$toto efface le fichier de nom $toto, nom qui n'est pas heureux !
Lorsqu’une chaîne de caractères est entourée des symboles ` ` (accent grave) le contenu est récupéré dans stdout puis interprété.
L’ensemble des instructions est rangé dans un fichier appelé script. Il ne faut pas oublier d’en changer les droits d’accès, avant tout usage, pour le rendre exécutable par la commande chmod. En cas d’oubli le système renverrait le message « access denied ».
Déclarations
Dans bash les variables ne sont pas typées. Ceci n'était pas vrai pour les shells précédents. La casse est significative comme toujours sous Unix.
L’affectation de valeur se fait par le signe =. Attention à ne pas ajouter de blancs autour.
toto=a $toto est donc le caractère a.
toto="ceci est une chaine "
Les entiers ne sont reconnus que par la commande let et ne sont nécessaires que pour effectuer des opérations arithmétiques sur ces variables :
let "nombre=12"
let "zozo=13"
((resultat=nombre+zozo))
echo $resultat
On peut déclarer des variables, des constantes c'est-à-dire des valeurs non modifiables en restreignant leur accès à la lecture uniquement, par l'instruction declare :
declare –r toto=6
declare -r toto="ceci est une chaine de caractères"
Pour les nombres entiers declare permet de simplifier l'écriture de certaines opérations sans employer let.
declare –i nombre
nombre=3
La notion de tableau existe également. La déclaration se fait en deux temps :
- déclaration du type éventuellement
- Affectation des valeurs
Ce qui signifie que l'espace nécessaire se réserve au fur et à mesure :
declare –a tableau
tableau[0]=1
tableau[1]=2
...
Soyons honnête : tout ceci est assez pénible et en réalité assez peu employé. On se reportera à la bibliographie si nécessaire.
Opérations sur les variables et les constantes
Opérations mathématiques
Les shells ne connaissent que les opérations entières. :
- Addition ((y=7+10))
- Incrémentation ((y++))
- Soustraction ((y=10-3))
- Multiplication ((y=5*6))
- Division ((y=37/5)). Le résultat sera 7
- Modulo ((y=37%5)). Le résultat est 2.
Des parenthèses supplémentaires permettent de forcer l'ordre des opérations. L'emploi des doubles parenthèses permet de s'affranchir des déclarations pour les entiers. Cela simplifie considérablement l'écriture d'un script.
Cliquez ici pour en voir un petit exemple.
Opérations sur les bits
- << décalage vers la gauche : ((y=2#1011<<2)) donne 101100
- >> décalage vers la droite : ((y=2#1011>>2)) donne 10
- & ET logique
- ^ OU exclusive
- | OU inclusif
- ! exclusion
La syntaxe est celle du langage C.
On remarquera la syntaxe des variables binaires :
- typeset –i2 y binaire
- typeset –i8 x octal
- typeset –i16 h hexadecimal
2#1010 nombre en base 2
8#234 nombre en base 8
16#a8e nombre en base hexadécimale
Opérations sur les chaînes de caractères
- ? désigne n'importe quel caractère
- [abc] a, b ou c
- [a-e] tous les caractères de a à e.
- * n'importe quelle chaîne
car?([a-z]|bohydrate|otte)
correspond à cara, car, cars, carbohydrate et carotte
mais pas à carB, carS, carbonate
Caractères spéciaux
Nous en avons déjà abordé quelques uns. Le tableau suivant mentionne les plus utilisés.
Caractère |
Usage |
Caractère |
Usage |
$ |
Début de valeur : $a |
& |
et |
# |
Commentaire |
! |
exclusion |
? |
Un caractère quelconque |
() |
Force l'ordre des remplacements |
* |
Une chaîne de caractères |
; |
Fin d'instruction |
{} |
Eléments d'un tableau :{a, b,c} |
`...` |
Tous les caractères spéciaux perdent leur signification sauf $ et \ |
[] |
Expansion [a-z] |
'...' |
Tous les caractères spéciaux perdent leur signification |
+ |
Ajout d'une chaîne de caractères |
"..." |
Les caractères spéciaux sont interprétés |
| |
ou |
\ |
Annonce qie le caractère suivant n'est pas spécial |
{}, [] et () sont également utilisés dans d'autres contextes.
Copyright Yves Epelboin, université P.M. Curie, février 2003, MAJ
25 février, 2007