Les cartes de référence suivantes apportent un résumé utile de certains concepts dans l'écriture des scripts. Le texte suivant traite de ces sujets avec plus de profondeur et donne des exemples d'utilisation.
Tableau B.1. Variables spéciales du shell
Variable | Signification |
---|---|
$0 | Nom du script |
$1 | Paramètre de position #1 |
$2 - $9 | Paramètres de position #2 - #9 |
${10} | Paramètre de position #10 |
$# | Nombre de paramètres de position |
"$*" | Tous les paramètres de position (en un seul mot) * |
"$@" | Tous les paramètres de position (en des chaînes séparées) |
${#*} | Nombre de paramètres sur la ligne de commande passés au script |
${#@} | Nombre de paramètres sur la ligne de commande passés au script |
$? | Code de retour |
$$ | Numéro d'identifiant du processus (PID) généré par le script |
$- | Options passées au script (utilisant set) |
$_ | Dernier argument de la commande précédente |
$! | Identifiant du processus (PID) du dernier job exécuté en tâche de fond |
* Doit être entre guillemet, sinon il vaudra par défaut « $@ ».
Tableau B.2. Opérateurs de test : comparaison binaire
Opérateur | Signification | ----- | Opérateur | Signification |
---|---|---|---|---|
Comparaison arithmétique | Comparaison de chaînes | |||
-eq | Égal à | = | Égal à | |
== | Égal à | |||
-ne | Différent de | != | Différent de | |
-lt | Plus petit que | \< | Plus petit que (ASCII) * | |
-le | Plus petit que ou égal à | |||
-gt | Plus grand que | \> | Plus grand que (ASCII) * | |
-ge | Plus grand que ou égal à | |||
-z | Chaîne vide | |||
-n | Chaîne non vide | |||
Comparaison arithmétique | Entre des parenthèses doubles (( ... )) | |||
> | Plus grand que | |||
>= | Plus grand que ou égal à | |||
< | Plus petit que | |||
<= | Plus petit que ou égal à |
* Si à l'intérieur d'une construction de tests à double crochets [[ ... ]] , alors l'échappement \ n'est pas nécessaire.
Tableau B.3. Opérateurs de test : fichiers
Opérateur | Tests si | ----- | Opérateur | Tests si |
---|---|---|---|---|
-e | Le fichier existe | -s | Le fichier est vide | |
-f | Le fichier est un fichier standard | |||
-d | Le fichier est un répertoire | -r | Le fichier a un droit de lecture | |
-h | Le fichier est un lien symbolique | -w | Le fichier a un droit en écriture | |
-L | Le fichier est un lien symbolique | -x | Le fichier a le droit d'exécution | |
-b | Le fichier est un périphérique bloc | |||
-c | Le fichier est un périphérique caractère | -g | L'option sgid est positionnée | |
-p | Le fichier est un tube | -u | L'option suid est positionnée | |
-S | Le fichier est un socket | -k | L'option « sticky bit » est positionnée | |
-t | Le fichier est associé à un terminal | |||
-N | Le fichier a été modifié depuis sa dernière lecture | F1 -nt F2 | Le fichier F1 est plus récent que F2 * | |
-O | Vous êtes le propriétaire du fichier | F1 -ot F2 | Le fichier F1 est plus ancien que F2 * | |
-G | L'identifiant du groupe du fichier est le même que vous | F1 -ef F2 | Les fichiers F1 et F2 sont des liens vers le même fichier * | |
! | « NOT » (inverse le résultat des tests ci-dessus) |
* Opérateur binaire (nécessite deux opérandes).
Tableau B.4. Substitution et expansion de paramètres
Expression | Signification |
---|---|
${var} | Valeur de var, identique à $var |
${var-DEFAUT} | Si var n'est pas initialisé, évalue l'expression $DEFAUT * |
${var:-DEFAUT} | Si var n'est pas initialisé ou est vide, évalue l'expression $DEFAUT * |
${var=DEFAUT} | Si var n'est pas initialisé, évalue l'expression $DEFAUT * |
${var:=DEFAUT} | Si var n'est pas initialisé, évalue l'expression $DEFAUT * |
${var+AUTRE} | Si var est initialisé, évalue l'expression $AUTRE, sinon est une chaîne null |
${var:+AUTRE} | Si var est initialisé, évalue l'expression $AUTRE, sinon est une chaîne null |
${var?ERR_MSG} | Si var n'est pas initialisé, affiche $ERR_MSG * |
${var:?ERR_MSG} | Si var n'est pas initialisé, affiche $ERR_MSG * |
${!varprefix*} | Correspond à toutes les variables déclarées précédemment et commençant par varprefix |
${!varprefix@} | Correspond à toutes les variables déclarées précédemment et commençant par varprefix |
* Bien sûr, si var est initialisé, évalue l'expression comme $var.
Tableau B.5. Opérations sur les chaînes
Expression | Signification |
---|---|
${#chaine} | Longueur de $chaine |
${chaine:position} | Extrait la sous-chaîne à partir de $chaine jusqu'à $position |
${chaine:position:longueur} | Extrait $longueur caractères dans la sous-chaîne à partir de $chaine jusqu'à $position |
${chaine#sous-chaine} | Supprime la plus petite correspondance de $sous-chaine à partir du début de $chaine |
${chaine##sous-chaine} | Supprime la plus grande correspondance de $sous-chaine à partir du début de $chaine |
${chaine%sous-chaine} | Supprime la plus courte correspondance de $sous-chaine à partir de la fin de $chaine |
${chaine%%sous-chaine} | Supprime la plus longue correspondance de $sous-chaine à partir de la fin de $chaine |
${chaine/sous-chaine/remplacement} | Remplace la première correspondance de $sous-chaine avec $remplacement |
${chaine//sous-chaine/remplacement} | Remplace toutes les correspondances de $sous-chaine avec $remplacement |
${chaine/#sous-chaine/remplacement} | Si $sous-chaine correspond au début de $chaine, substitue $remplacement par $sous-chaine |
${chaine/%sous-chaine/remplacement} | Si $sous-chaine correspond à la fin de $chaine, substitue $remplacement par $sous-chaine |
expr match "$chaine" '$sous-chaine' | Longueur de $sous-chaine* correspondant au début de $chaine |
expr "$chaine" : '$sous-chaine' | Longueur de $sous-chaine* correspondant au début de $chaine |
expr index "$chaine" $sous-chaine | Position numérique dans $chaine du premier caractère correspondant dans $sous-chaine |
expr substr $chaine $position $longueur | Extrait $longueur caractères à partir de $chaine commençant à $position |
expr match "$chaine" '\($sous-chaine\)' | Extrait $sous-chaine* au début de $chaine |
expr "$chaine" : '\($sous-chaine\)' | Extrait $sous-chaine* au début de $chaine |
expr match "$chaine" '.*\($sous-chaine\)' | Extrait $sous-chaine* à la fin de $chaine |
expr "$chaine" : '.*\($sous-chaine\)' | Extrait $sous-chaine* à la fin de $chaine |
* Où $sous-chaine est une expression rationnelle.
Tableau B.6. Constructions diverses
Expression | Interprétation |
---|---|
Crochets | |
if [ CONDITION ] | Construction de tests |
if [[ CONDITION ]] | Construction de tests étendue |
Tableau[1]=element1 | Initialisation d'un tableau |
[a-z] | Ensemble de caractères se suivant à l'intérieur d'une expression rationnelle |
Accolades | |
${variable} | Substitution de paramètres |
${!variable} | Référence de variable indirecte |
{ commande1; commande2; ... commandeN; } | Bloc de code |
{chaine1,string2,string3,...} | Expansion |
{a..z} | Expansion d'accolades |
{} | Remplacement de texte, après find et xargs |
Parenthèses | |
( commande1; commande2 ) | Groupe de commandes exécutées dans un sous-shell |
Tableau=(element1 element2 element3) | Initialisation d'un tableau |
result=$(COMMANDE) | Exécute la commande dans un sous-shell et affecte le résultat dans une variable |
>(COMMANDE) | Substitution de processus |
<(COMMANDE) | Substitution de processus |
Double parenthèses | |
(( var = 78 )) | Arithmétique entière |
var=$(( 20 + 5 )) | Arithmétique entière, avec affectation de variables |
(( var++ )) | Incrément de variables style C |
(( var-- )) | Incrément de variables style C |
(( var0 = var1<98?9:21 )) | Opération à trois arguments |
Guillemets | |
"$variable" | Guillemets « faibles » |
'chaine' | Guillemets « forts » |
Guillemets inversés | |
result=`COMMANDE` | Exécute la commande dans un sous-shell et affecte le résultat à une variable |