1. La commande eval.
Caractéristiques :
- eval vient de "evaluate"
("évaluer").
- Cette commande procède en deux temps :
- Dans un premier temps, la commande est remplacée par la liste
de ses paramètres, avec interprétation des métacaractères
du shell.
- Dans un deuxième temps, cette liste de paramètres est considérée
comme une commande UNIX, et exécutée en tant que telle, donc
en particulier avec, à nouveau, interprétation des métacaractères
du shell.
- Elle peut apparaître en début de
branchement.
- Il s'agit d'une commande interne, qui peut donc
fortement varier d'un shell à l'autre.
Syntaxe :
Description :
Exemple :
Cette séquence de commandes (tapées les unes à
la suite des autres, ou à l'intérieur d'un script) affichera
la valeur 1, car la première évaluation de
la commande eval produit la commande suivante :
En revanche, la séquence suivante :
Codes de retour :
- Pas d'erreur : 0
- Opération interrompue pour cause d'erreur : > 0
2. Exercice 1.
Écrire un script, de nom variables.sh, qui
reçoit en paramètres une chaîne de caractères et un
entier n. Ce script doit initialiser des variables,
dont le nom est composé de la chaîne de caractères,
suivie d'une valeur entière comprise entre 1
et n. La valeur affectée à chaque
variable sera celle utilisée pour construire son nom. Par exemple,
si on lance la commande variables.sh var 4, le script
devra effectuer les initialisations suivantes :
Remarque :
Cet exercice ne peut pas être fait sans l'aide de la commande
eval. On peut donc justifier ainsi l'existence de
cette commande.
3. La commande shift.
Caractéristiques :
- shift signifie "déplacer".
- Cette commande permet de réaliser un décalage vers la
gauche (d'un rang ou plus) des valeurs des paramètres positionnels
du shell courant.
- Il s'agit d'une commande interne, qui peut donc
fortement varier d'un shell à l'autre.
Syntaxe :
Description :
Exemples :
- Séquence utilisant la commande shift :
$ set ab cd
$ echo $1
ab
$ shift
$ echo $1
cd
$ shift
$ echo $1
$
|
- Script utilisant la commande shift :
deca.sh
|
echo "Avant décalage : $1 $2 $3
$4 $5 $6 $7 $8 $9"
shift
echo "Après décalage : $1 $2 $3 $4 $5 $6 $7 $8 $9" |
Voici deux exemples d'exécution de ce script, avec des nombres
de paramètres différents :
$ deca.sh 1 2 3 4 5 6 7 8 9 10
Avant décalage : 1 2 3 4 5 6 7 8 9
Après décalage : 2 3 4 5 6 7 8 9 10
$ deca.sh 1 2 3 4 5
Avant décalage : 1 2 3 4 5
Après décalage : 2 3 4 5
$ |
Donc $1 reçoit la valeur de $2,
$2 reçoit la valeur de $3, etc...
Codes de retour :
- Pas d'erreur : 0
- Opération interrompue pour cause d'erreur : > 0
Remarques :
- Lors de l'appel de la commande shift, l'absence d'argument
n équivaut à une valeur de cet argument égale
à 1.
- Les valeurs de $# et de $*
sont mises à jour automatiquement par la commande shift
(le paramètre $# est décrémenté).
4. Exercice 2.
Écrire un script permettant d'afficher à l'écran le
contenu d'une série de fichiers dont les noms sont passés
en paramètres, et n'utilisant pas de boucle for.
Le message <nom fichier> inaccessible sera
affiché si le fichier <nom fichier> est inexistant
ou ne peut être lu.
5. Exercice 3.
Même question que dans l'exercice précédent, en prenant en compte les
spécifications suivantes :
- Écrire le contenu des fichiers dans un fichier récepteur
dont le nom est passé en premier paramètre.
- Afficher à l'écran, pour chaque fichier, le message
<nom_fichier> recopié ou <nom_fichier>
inaccessible, selon le cas.
6. Exercice 4.
Écrire le script chemins.sh, permettant d'afficher
les chemins d'accès aux fichiers contenant une chaîne de caractères
donnée, dans un répertoire donné (à quelque
niveau de la sous-arborescence que ce soit).
Ces pages ont été réalisées
par A. Crouzil, J.D. Durou et Ph. Joly.
Pour tout commentaire, envoyer un mail à
crouzil@irit.fr, à durou@irit.fr ou à Philippe.Joly@irit.fr.