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