Unix / Linux - Mécanismes de devis Shell
Dans ce chapitre, nous discuterons en détail des mécanismes de cotation de Shell. Nous commencerons par discuter des métacaractères.
Les métacaractères
Unix Shell fournit divers métacaractères qui ont une signification particulière lors de leur utilisation dans n'importe quel script Shell et provoque la terminaison d'un mot à moins qu'il ne soit cité.
Par exemple, ? correspond avec un seul caractère lors de la liste des fichiers dans un répertoire et un *correspond à plus d'un caractère. Voici une liste de la plupart des caractères spéciaux du shell (également appelés métacaractères) -
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
Un caractère peut être cité (c'est-à-dire fait pour se représenter) en le précédant d'un \.
Exemple
L'exemple suivant montre comment imprimer un * ou un ? -
#!/bin/sh
echo Hello; Word
Lors de l'exécution, vous recevrez le résultat suivant -
Hello
./test.sh: line 2: Word: command not found
shell returned 127
Essayons maintenant d'utiliser un caractère entre guillemets -
#!/bin/sh
echo Hello\; Word
Lors de l'exécution, vous recevrez le résultat suivant -
Hello; Word
le $ signe est l'un des métacaractères, il doit donc être entre guillemets pour éviter une manipulation particulière par le shell -
#!/bin/sh
echo "I have \$1200"
Lors de l'exécution, vous recevrez le résultat suivant -
I have $1200
Le tableau suivant répertorie les quatre formes de citation -
Sr.No. | Devis et description |
---|---|
1 | Single quote Tous les caractères spéciaux entre ces guillemets perdent leur signification particulière. |
2 | Double quote La plupart des caractères spéciaux entre ces guillemets perdent leur signification spéciale avec ces exceptions -
|
3 | Backslash Tout caractère qui suit immédiatement la barre oblique inverse perd sa signification particulière. |
4 | Back quote Tout ce qui se trouve entre les guillemets est traité comme une commande et est exécuté. |
Les citations uniques
Considérez une commande echo qui contient de nombreux caractères shell spéciaux -
echo <-$1500.**>; (update?) [y|n]
Mettre une barre oblique inverse devant chaque caractère spécial est fastidieux et rend la ligne difficile à lire -
echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
Il existe un moyen simple de citer un grand groupe de caractères. Mettez un guillemet simple (') au début et à la fin de la chaîne -
echo '<-$1500.**>; (update?) [y|n]'
Les caractères entre guillemets simples sont indiqués comme si une barre oblique inverse se trouvait devant chaque caractère. Avec cela, la commande echo s'affiche correctement.
Si un guillemet simple apparaît dans une chaîne à afficher, vous ne devez pas mettre la chaîne entière entre guillemets simples à la place, vous devez le précéder en utilisant une barre oblique inverse (\) comme suit -
echo 'It\'s Shell Programming
Les doubles citations
Essayez d'exécuter le script shell suivant. Ce script shell utilise des guillemets simples -
VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
Lors de l'exécution, vous recevrez le résultat suivant -
$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]
Ce n'est pas ce qui devait être affiché. Il est évident que les guillemets simples empêchent la substitution de variables. Si vous souhaitez remplacer des valeurs de variable et que les virgules inversées fonctionnent comme prévu, vous devez mettre vos commandes entre guillemets comme suit -
VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"
Lors de l'exécution, vous recevrez le résultat suivant -
ZARA owes <-$1500.**>; [ as of (07/02) ]
Les guillemets doubles suppriment la signification spéciale de tous les caractères sauf les suivants -
$ pour la substitution de paramètres
Contre-indications pour la substitution de commande
\$ pour activer les signes dollar littéraux
\` pour activer les backquotes littéraux
\" pour activer les guillemets doubles intégrés
\\ pour activer les barres obliques inverses intégrées
Tous les autres \ les caractères sont littéraux (pas spéciaux)
Les caractères entre guillemets simples sont indiqués comme si une barre oblique inverse se trouvait devant chaque caractère. Cela permet à la commande d'écho de s'afficher correctement.
Si un guillemet simple apparaît dans une chaîne à afficher, vous ne devez pas mettre la chaîne entière entre guillemets simples à la place, vous devez le précéder en utilisant une barre oblique inverse (\) comme suit -
echo 'It\'s Shell Programming'
Les Backquotes
Mettre n'importe quelle commande Shell entre backquotes exécute la commande.
Syntaxe
Voici la syntaxe simple pour mettre n'importe quel Shell command entre les guillemets -
var=`command`
Exemple
le date est exécutée dans l'exemple suivant et le résultat produit est stocké dans la variable DATA.
DATE=`date`
echo "Current Date: $DATE"
Lors de l'exécution, vous recevrez le résultat suivant -
Current Date: Thu Jul 2 05:28:45 MST 2009