Commande Bash eval

La commande `eval` est utilisée dans bash pour exécuter des arguments comme une commande shell. Les arguments sont joints dans une chaîne et pris comme entrée pour la commande shell pour exécuter la commande. `eval` exécute la commande dans le shell actuel. Cette commande est utile lorsqu’il faut exécuter une commande qui contient un opérateur spécial ou des mots-clés réservés. Cette commande peut également être utilisée dans n’importe quel script où le nom de la variable est inconnu jusqu’à l’exécution du script. Ce tutoriel aidera les utilisateurs de Linux à apprendre l’utilisation de cette commande.

Syntaxe:

eval

Ici, les arguments sont analysés et combinés en une chaîne qui sera exécutée par le shell. `eval` renvoie un code d’état de sortie après l’exécution de la commande. `eval` renvoie 0 comme code d’état de sortie si aucun argument n’est fourni ou si seul un argument nul est fourni.

Exemple-1 : Exécuter la commande `wc` en utilisant `eval`

Supposons qu’un fichier texte nommé « département.txt » contienne le texte suivant. Le nombre total de lignes du fichier peut être compté par la commande `wc`.

département.txt

CSE
EEE
ETE
ENGLISH
BBA
PHARMACY

La commande suivante enregistrera la commande `wc` pour compter le nombre total de lignes du fichier, département.txt à la variable, $mycommand.

$ mycommand= »wc -l département.txt »

La commande `eval` suivante va exécuter la commande `wc` et imprimer le nombre total de lignes.

$ eval $mycommand

Sortie:

La sortie montre que le fichier department.txt a 6 lignes.

Exemplel-2 : Exécuter la commande `expr` en utilisant `eval`

Créer un fichier bash nommé evaltest.sh et ajouter le script suivant. Ce script va affecter deux valeurs entières dans la variable $x et $y. Les commandes `expr` et `echo` sont assignées dans deux variables, $c1 et $c2 qui sont exécutées plus tard en utilisant la commande `eval`.

evaltest.sh

# !/bin/bash
#Initialiser les variables x et y
x=5
y=15
#La première variable de commande est utilisée pour assigner la commande `expr` afin d’additionner les valeurs de $x et $y
c1= »`expr $x + $y` »
#La seconde variable de commande est utilisée pour affecter la commande `echo`
c2= »echo »
#`eval` calculera et imprimera la somme de $x et $y en exécutant les commandes des variables $c1
et $c2
eval $c2 $c1

Exécutez le script.

$ bash evaltest.sh

La somme de 5 et 15 est 20 qui est affichée dans la sortie.

Exemple-3 : Imprimer la valeur d’une variable qui est assignée dans une autre variable

Créer un script bash nommé evaltest2.sh avec le script suivant. Ici, une variable est utilisée pour assigner le nom d’une autre variable qui contient une donnée de type chaîne. La commande `eval` imprimera la valeur de la variable qui contient le nom d’une autre variable comme contenu.

evaltest2.sh

# !/bin/bash
# Affecter une valeur de chaîne de caractères dans la variable, $str1
str1= »Shell Script »
# Affecter le nom de la variable, « str1 » à la variable $str2
str2=str1
#Stocker la commande dans la variable, $command
command= »echo »
# La commande `eval` exécutera la commande `echo` et imprimera la valeur de la variable
qui contient dans une autre variable
eval $command \${$str2}

Exécutez le script.

$ bash evaltest2.sh

La valeur de la variable, $str1 est imprimée.

Il existe une autre façon d’accéder à la valeur d’une variable dont le nom est la valeur d’une autre variable. En utilisant le symbole ‘!’, on peut accéder à la valeur de ce type de variable. La commande suivante peut être utilisée comme une alternative du script précédent et la sortie sera la même.

$ str1= »Shell Script » ; str2=str1 ; command= »echo » ; eval $command ${!str2}.

Exemple-4 : Créer une série de variables avec des valeurs et calculer la somme des valeurs en utilisant la commande `eval`

Créer un script bash nommé evaltest3.sh et ajouter le script suivant. Ce script va créer une série de variables et stocker les valeurs dans les variables en utilisant la commande `eval`. Les valeurs des variables seront additionnées et stockées dans une variable nommée $sum. Ensuite, la commande `echo` avec les valeurs des chaînes de caractères est assignée dans une variable qui est utilisée dans la commande `eval` pour imprimer la valeur de la variable $sum.

evaltest3.sh

#!/bin/bash
# Initialiser la variable $sum avec la valeur 0
sum=0
# Déclarer une boucle for qui itérera 4 fois
for n in {1…4}
do
# Créer quatre variables à l’aide de la commande eval
eval x$n=$n
# Additionner les valeurs de la variable avec $sum
sum=$(($sum+$x$n))
done
# Assigner la commande `echo` avec la chaîne de caractères dans une variable
command= »echo ‘Le résultat de la somme=' »
# La commande `eval` imprime la valeur de la somme en utilisant des variables
eval $command $sum

Exécutez le script.

$ bash evaltest3.sh

La somme des quatre variables est, 1+2+3+4=10 qui est imprimée.

Exemple-5 : Utiliser la commande `eval` pour supprimer la liste des fichiers

Créer un fichier bash nommé evaltest4.sh avec le script suivant. Ce script lira trois arguments de ligne de commande comme des noms de fichiers qui seront supprimés et stockera les valeurs des arguments dans une variable de type tableau, $fn. La commande ‘rm’ est stockée dans une variable, $command. Une boucle For est déclarée ici pour récupérer chaque nom de fichier et supprimer le fichier en utilisant la commande `eval` si le fichier existe.

evaltest4.sh

# !/bin/bash
#Déclarer un tableau
declare -A fn
# Lire les trois arguments de la ligne de commande et les stocker dans les trois index du tableau
fn=$1
fn=$2
fn=$3
# Stocker la commande de suppression dans une variable
command= »rm »
# La boucle for itérera trois fois pour lire les trois éléments du tableau
for index in 0 1 2
do
# Vérifier que le fichier existe ou non
if } ]] ; then
# si le fichier existe alors supprimer le fichier
eval $command ${fn}
# Informer l’utilisateur que le fichier est supprimé
echo « ${fn} est supprimé. »
Else
#Informer l’utilisateur que le fichier n’existe pas
echo « ${fn} not exist. »
fi
done

Exécuter le script.

$ bash evaltest4.sh marks.docx item.txt product.docx

Ici, trois noms de fichiers sont fournis au moment de l’exécution du script. La sortie montre que marks.docx et product.docx existent dans l’emplacement actuel et les fichiers sont supprimés et, item.txt n’existe pas dans l’emplacement actuel.

Conclusion

Toute commande bash peut être exécutée par la commande `eval` en la déclarant comme une chaîne. La commande `eval` est utilisée dans ce tutoriel pour exécuter différentes commandes intégrées de bash et créer une série de variables. Les utilisations de la commande `eval` seront éclaircies pour les utilisateurs et ils seront en mesure d’utiliser cette commande à des fins diverses après avoir lu ce tutoriel.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.