Galactic Civilizations 3
La substitution de commandes en shell

La substitution de commandes en shell

Catégorie: Programmation.
Posté par le 16/04/2013.
Dernière mise à jour le 20/05/2013.

Description

Tout au long de ce tutoriel, vous apprendrez comment utiliser le mécanisme de substitution de commandes dans vos scripts shell.

Introduction

Ce tutoriel s’adresse aux personnes sous Linux (Debian, Ubuntu, ...). Il ne nécessite aucun prérequis et peut être réalisé à l'aide d'un simple éditeur de texte.

But

La substitution de commandes permet d'exécuter une commande et d'enregistrer le résultat de la commande dans une variable.

Exemples d'utilisation

La syntaxe de la substitution de commandes est la suivante: $(maCommande)
Voici un exemple d'utilisation de la substitution de commandes en shell:

...
#affiche le contenu du répertoire courant dans la sortie standard.
echo $(ls)
...

Voici un autre exemple:

...
#enregistre le contenu du répertoire courant
#dans la variable "mavar"

mavar=$(ls)
echo $mavar
...

Substitution de plusieurs commandes

Le mécanisme de substitution de commandes peut être utilisé sur plusieurs commandes. Pour ce faire, il faut séparer chaque commande par un point-virgule « ; ».

set $(pwd ; whoami)
echo $1: $2
# tutorielsenfolie: /home/tutorielsenfolie

On peut également imbriquer plusieurs substitutions de commande. Voici un exemple:

echo $( ls $(pswd)/testSubstitution)

Ici, on considère que testSubstitution est un répertoire se trouvant dans le dossier home de l'utilisateur.

NB: les variables peuvent être présentes dans une substitution de commandes. Voici un exemple:

echo $( ls $maVar/testSubstitution)

Erreurs

Lorsque la substitution de commandes est utilisée avec la commande interne « set », l’erreur suivante peut se produire :

set $( ls -l .testSubstitution)

bash: set: -w: invalid option
set: usage: set [--abefhkmnptuvxBCHP] [-o option] [arg ...]

#sortie de la commande ls -l
ls -l .testSubstitution
-rw-r--r-- 1 tutorielsenfolie users 1342 Avr 11 2013 .testSubstitution)

Ici, on considère que testSubstitution est un répertoire se trouvant dans le dossier courant.

L'erreur vient du fait que la substitution contient le caractère tiret « - ». la commande set interprète cela comme une option, ce qui provoque une erreur. Pour résoudre ce problème, il faut doubler le tiret :

set -- $(ls -l .testSubstitution)
echo $1
-rw-r--r-

Substitutions de commandes et paramètres régionaux

Sous linux, les données à caractère régional tels que les dates varient en fonction des paramètres régionaux (locale) utilisés.

Il est possible d'afficher les paramètres régionaux dans la ligne de commande. Pour ce faire, utilisez la commande « locale »:

locale
LANG=fr_FR@euro
LC_CTYPE="fr_FR@euro"
LC_NUMERIC="fr_FR@euro"
LC_TIME="fr_FR@euro"
LC_COLLATE="fr_FR@euro"
LC_MONETARY="fr_FR@euro"
LC_MESSAGES="fr_FR@euro"
LC_PAPER="fr_FR@euro"
LC_NAME="fr_FR@euro"
LC_ADDRESS="fr_FR@euro"
LC_TELEPHONE="fr_FR@euro"
LC_MEASUREMENT="fr_FR@euro"
LC_IDENTIFICATION="fr_FR@euro"
LC_ALL=

Ce sont ces paramètres qui définissent le format de la date retournée par la commande « date ».

Si votre programme utilise la valeur retournée par la commande « date » il ne fonctionnera plus si celui-ci est utilisé avec d'autres paramètres régionaux.
Pour résoudre ce problème on peut utiliser la substitution de commandes pour définir temporairement les paramètres à utiliser pour une commande. Pour ce faire, exécutez la commande suivante:

LC_ALL=C date

NB: ici, on affecte les paramètres par défaut « C » à la commande « date ».

Voici comment récupérer le « mois » pour la commande « date »:

set $(LC_ALL=C date) ; echo $2
Avr

Tu as aimé ce tutoriel ?
Aide nous à améliorer le site ! Deviens partenaire officiel ou suis nous sur facebook !

Commentaires[0]

Tu as aimé ce tutoriel ? Alors partage-le avec tes amis !
Partager sur Facebook Partager sur Twitter Partager sur Myspace Partager sur Stumbleupon Soumettre sur Reddit Partager sur Digg Ajouter à vos favoris Technorati Ajouter à vos favoris Live Ajouter à vos favoris Google Ajouter sur vos favoris Yahoo Voir le flux rss

Mots Clés: Debian Linux Programmation script shell substitution de commandes Ubuntu

Veve :
(11/04/2013 - 17:19:44)
il faut juste mettre "sudo" à la place de "su" pour exécuter la commande en root

Veve :
(11/04/2013 - 17:18:56)
Salut tu peux aller lire ce tutoriel: http://www.tutorielsenfolie.com/tutoriels-63-installation-configuration-opennebula.html Il fonctionne aussi sous ubuntu

safa.souissi4 :
(10/04/2013 - 20:58:13)
s'il vous plait c urgent :(

safa.souissi4 :
(10/04/2013 - 20:56:25)
bonsoir,je cherche un tutos pour installer opennebula.org sous ubuntu 12.

Veve :
(18/03/2013 - 20:07:49)
oui, j'essaye de voir d'ou viens le problème.

sonde :
(18/03/2013 - 13:29:57)
re merci (j apprend un peu plus) je crois que j ai trouver pourquoi je peu pas poster si il y a ligne code impossible de poster lol

Veve :
(17/03/2013 - 21:34:49)
Salut, j'espère que ça t'a aidé.

sonde :
(17/03/2013 - 09:59:02)
pour ton aide

sonde :
(17/03/2013 - 09:57:36)
slt Veve impossible de laisser com

sonde :
(17/03/2013 - 09:56:55)
??

Demi-dieu :
(15/03/2013 - 18:41:13)
salut ^^

sonde :
(13/03/2013 - 14:49:35)
un petit coucou

Tanamoureuse :
(29/09/2011 - 06:11:08)
Je t'aime

Faire un don

Ma Publicité ici


Faire un don