Bash eval commando

`eval` commando wordt gebruikt in bash om argumenten uit te voeren zoals een shell commando. Argumenten worden samengevoegd in een string en meegenomen als input voor het shell commando om het commando uit te voeren. `eval` voert het commando uit in de huidige shell. Dit commando is handig wanneer een commando moet worden uitgevoerd dat een speciale operator of gereserveerde sleutelwoorden bevat. Dit commando kan ook in elk script worden gebruikt waar de naam van de variabele onbekend is totdat het script wordt uitgevoerd. Deze handleiding helpt Linux-gebruikers om het gebruik van dit commando te leren.

Syntax:

eval

Hier worden argumenten ontleed en gecombineerd tot een string die door de shell zal worden uitgevoerd. `eval` retourneert een exit status code na het uitvoeren van het commando. `eval` retourneert 0 als exit status code als er geen argument is gegeven of alleen een null argument is gegeven.

Voorbeeld-1: `wc` commando uitvoeren met `eval`

Voorstel dat een tekstbestand met de naam “department.txt” de volgende tekst bevat. Het totale aantal regels van het bestand kan worden geteld met `wc` commando.

department.txt

CSE
EEE
ETE
ENGLISH
BBA
PHARMACY

Het volgende commando slaat `wc` op om het totale aantal regels van het bestand, department.txt te tellen naar de variabele, $mycommand.

$ mycommand=”wc -l department.txt”

Het volgende `eval` commando zal `wc` commando uitvoeren en het totaal aantal regels afdrukken.

$ eval $mycommand

Uitvoer:

De uitvoer laat zien dat department.txt bestand 6 regels heeft.

Examplel-2: `expr` commando uitvoeren met `eval`

Maak een bash bestand aan met de naam evaltest.sh en voeg het volgende script toe. Dit script zal twee integer waarden toewijzen aan de variabele $x en $y. De `expr` en `echo` commando’s worden toegewezen aan twee variabelen, $c1 en $c2 die later worden uitgevoerd door gebruik te maken van `eval` commando.

evaltest.sh

#!/bin/bash
#Initialiseer de variabelen x en y
x=5
y=15
#De eerste opdrachtvariabele wordt gebruikt om `expr` toe te wijzen om de waarden van $x en $y op te tellen
c1=”`expr $x + $y`”
#De tweede opdracht variabele wordt gebruikt om het `echo` commando toe te wijzen
c2=”echo”
#`eval` zal de som van $x en $y berekenen en afdrukken door de commando’s van de variabelen $c1
en $c2 uit te voeren
eval $c2 $c1

Heruitvoer het script.

$ bash evaltest.sh

De som van 5 en 15 is 20 die in de uitvoer wordt getoond.

Voorbeeld-3: Print de waarde van een variabele die is toegewezen in een andere variabele

Maak een bash script met de naam evaltest2.sh met het volgende script. Hier, een variabele wordt gebruikt om de naam van een andere variabele die een string data bevat toe te wijzen. Het `eval` commando zal de waarde van de variabele die de naam van een andere variabele bevat als inhoud afdrukken.

evaltest2.sh

#!/bin/bash
# Wijs een tekenreeks toe aan de variabele, $str1
str1=”Shell Script”
# Wijs de naam van de variabele, “str1” toe aan de variabele $str2
str2=str1
# Sla het commando op in de variabele, $command
command=”echo”
# `eval` commando zal het `echo` commando uitvoeren en de waarde van de variabele
die bevat in een andere variabele afdrukken
eval $command \${$str2}

Heruitvoer het script.

$ bash evaltest2.sh

De waarde van de variabele, $str1 wordt afgedrukt.

Er is een andere manier om de waarde van een variabele te benaderen waarvan de naam de waarde van een andere variabele is. Met behulp van het symbool ‘!’ kan de waarde van dit type variabele worden opgevraagd. Het volgende commando kan worden gebruikt als alternatief voor het vorige script en de uitvoer zal hetzelfde zijn.

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

Exemplaar-4: Maak een reeks variabelen met waarden en bereken de som van de waarden met `eval` commando

Maak een bash script met de naam evaltest3.sh en voeg het volgende script toe. Dit script zal een reeks variabelen creëren en de waarden in de variabelen opslaan met `eval` commando. De waarden van de variabelen worden opgeteld en opgeslagen in een variabele genaamd $sum. Vervolgens wordt `echo` commando met stringwaarden toegewezen aan een variabele die wordt gebruikt in het `eval` commando om de waarde van de $sum variabele af te drukken.

evaltest3.sh

#!/bin/bash
# Initialiseer de variabele $sum met de waarde 0
sum=0
# Verklaar een for-lus die 4 keer zal itereren
for n in {1..4}
do
# Maak vier variabelen met behulp van het commando eval
eval x$n=$n
# Tel de waarden van de variabele op met $sum
sum=$(($sum+$x$n))
done
# Wijs het commando `echo` toe met string in een variabele
command=”echo ‘Het resultaat van de som='”
# `eval` command print de somwaarde uit met behulp van variabelen
eval $command $sum

Heruitvoer het script.

$ bash evaltest3.sh

De som van de vier variabelen is, 1+2+3+4=10 dat wordt afgedrukt.

Exemplaar-5: `eval` commando gebruiken om de lijst met bestanden te verwijderen

Maak een bash bestand aan met de naam evaltest4.sh met het volgende script. Dit script leest drie command-line argumenten als bestandsnamen die zullen worden verwijderd en slaat de argumentwaarden op in een array variabele, $fn. Het `rm’ commando wordt opgeslagen in een variabele, $command. For-lus wordt hier gedeclareerd om elke bestandsnaam op te halen en het bestand te verwijderen met `eval` commando als het bestand bestaat.

evaltest4.sh

#!/bin/bash
#Klar een array
declare -A fn
# Lees drie opdrachtregelargumenten en sla deze op in drie indexen van de array
fn=$1
fn=$2
fn=$3
# Sla het verwijdercommando op in een variabele
command=”rm”
# for-lus zal drie keer itereren om drie array-elementen te lezen
for index in 0 1 2
do
# Controleer of het bestand bestaat of niet bestaat
if } ]]; then
# als het bestand bestaat dan verwijder het bestand
eval $command ${fn}
# Informeer de gebruiker dat het bestand is verwijderd
echo “${fn} is verwijderd.”
Else
# Informeer de gebruiker dat het bestand niet bestaat
echo “${fn} bestaat niet.”
fi
done

Het script uitvoeren.

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

Hier zijn drie bestandsnamen opgegeven op het moment dat het script wordt uitgevoerd. De uitvoer laat zien dat marks.docx en product.docx bestaan op de huidige locatie en de bestanden zijn verwijderd en, item.txt bestaat niet op de huidige locatie.

Conclusie

Elk bash commando kan worden uitgevoerd door `eval` commando door het te declareren als een string. `eval` commando wordt in deze tutorial gebruikt voor het uitvoeren van verschillende ingebouwde commando’s van bash en het creëren van een reeks variabelen. Het gebruik van `eval` commando zal duidelijk worden voor de gebruikers en ze zullen in staat zijn om dit commando te gebruiken voor verschillende doeleinden na het lezen van deze tutorial.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.