Bash eval-kommando

`eval`-kommandot används i bash för att utföra argument som ett skalkommando. Argumenten förenas i en sträng och tas som indata för skalkommandot för att utföra kommandot. `eval` utför kommandot i det aktuella skalet. Detta kommando är användbart när det krävs att ett kommando som innehåller en speciell operatör eller reserverade nyckelord ska exekveras. Detta kommando kan användas i alla skript även där variabelns namn är okänt tills skriptet exekveras. Den här handledningen kommer att hjälpa Linuxanvändare att lära sig att använda det här kommandot.

Syntax:

eval

Här analyseras argumenten och kombineras till en sträng som kommer att exekveras av skalet. `eval` returnerar en exitstatuskod efter att kommandot har utförts. `eval` returnerar 0 som utgångsstatuskod om inget argument tillhandahålls eller endast ett nollargument tillhandahålls.

Exempel-1: Exekvera kommandot `wc` med hjälp av `eval`

Anta att en textfil med namnet ”department.txt” innehåller följande text. Det totala antalet rader i filen kan räknas med kommandot `wc`.

avdelning.txt

CSE
EEE
ETE
ENGLISH
BBA
PHARMACY

Följande kommando kommer att lagra `wc`-kommandot för att räkna det totala antalet rader i filen department.txt till variabeln $mycommand.

$ mycommand=”wc -l department.txt”

Med följande `eval`-kommando körs `wc`-kommandot och det totala antalet rader skrivs ut.

$ eval $mycommand

Output:

Utputet visar att department.txt-filen har 6 rader.

Exempel-2: Utför kommandot `expr` med hjälp av `eval`

Skapa en bash-fil med namnet evaltest.sh och lägg till följande skript. Detta skript kommer att tilldela två heltalsvärden till variablerna $x och $y. Kommandona `expr` och `echo` tilldelas två variabler, $c1 och $c2, som senare exekveras med hjälp av kommandot `eval`.

evaltest.sh

#!/bin/bash
#Initialisera variablerna x och y
x=5
y=15
#Den första kommandovariabeln används för att tilldela `expr`-kommandot för att addera värdena $x och $y
c1=”`expr $x + $y`”
#Det andra kommandot. används för att tilldela kommandot `echo`
c2=”echo”
#`eval` kommer att beräkna och skriva ut summan av $x och $y genom att utföra kommandona i variablerna $c1
och $c2
eval $c2 $c1

Kör skriptet.

$ bash evaltest.sh

Summan av 5 och 15 är 20 som visas i utmatningen.

Exempel-3: Skriv ut värdet på en variabel som tilldelas i en annan variabel

Skapa ett bash-skript som heter evaltest2.sh med följande skript. Här används en variabel för att tilldela namnet på en annan variabel som innehåller strängdata. Kommandot `eval` kommer att skriva ut värdet av variabeln som innehåller en annan variabels namn som innehåll.

evaltest2.sh

#!/bin/bash
# Tilldela ett strängvärde till variabeln $str1
str1=”Shell Script”
# Tilldela variabelnamnet ”str1” till variabeln $str2
str2=str1
#Lagra kommandot i variabeln, $command
command=”echo”
# Kommandot `eval` kommer att utföra kommandot `echo` och skriva ut värdet av variabeln
som innehåller i en annan variabel
eval $command \${$str2}

Kör skriptet.

$ bash evaltest2.sh

Värdet av variabeln $str1 skrivs ut.

Det finns ett annat sätt att få tillgång till värdet av en variabel vars namn är värdet av en annan variabel. Med hjälp av symbolen ’!’ kan man få tillgång till värdet av denna typ av variabel. Följande kommando kan användas som ett alternativ till det föregående skriptet och resultatet blir detsamma.

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

Exempel-4: Skapa en serie variabler med värden och beräkna summan av värdena med hjälp av kommandot `eval`

Skapa ett bash-skript med namnet evaltest3.sh och lägg till följande skript. Detta skript kommer att skapa en serie variabler och lagra värdena i variablerna med hjälp av kommandot `eval`. Värdena i variablerna kommer att adderas och lagras i en variabel som heter $sum. Därefter tilldelas kommandot `echo` med strängvärden till en variabel som används i kommandot `eval` för att skriva ut värdet på variabeln $sum.

evaltest3.sh

#!/bin/bash
# Initialisera variabeln $sum med värdet 0
sum=0
# Deklarera en for-slinga som kommer att iterera 4 gånger
for n in {1..4}
do
# Skapa fyra variabler med hjälp av kommandot eval
eval x$n=$n
# Lägg till värdena för variabeln $sum
sum=$(($sum+$x$n))
done
# Tilldela kommandot `echo`. med sträng till en variabel
kommando=”echo ’Resultatet av summan='”
# `eval`-kommando skriver ut summavärdet med hjälp av variabler
eval $kommando $sum

Kör skriptet.

$ bash evaltest3.sh

Summan av de fyra variablerna är, 1+2+3+4=10 som skrivs ut.

Exempel-5: Användning av `eval`-kommandot för att ta bort listan över filer

Skapa en bash-fil med namnet evaltest4.sh med följande skript. Det här skriptet läser tre kommandoradsargument som filnamn som ska tas bort och lagrar argumentvärdena i en arrayvariabel, $fn. Kommandot `rm’ lagras i en variabel, $command. For-slingan deklareras här för att hämta varje filnamn och ta bort filen med kommandot `eval` om filen finns.

evaltest4.sh

#!/bin/bash
#Deklarera en array
deklarera -A fn
# Läs tre kommandoradsargument och lagra dem i tre index i matrisen
fn=$1
fn=$2
fn=$3
# Lagra borttagningskommandot i en variabel
command=”rm”
# for-slinga kommer att iterera tre gånger för att läsa tre element i matrisen
for index in 0 1 2
do
# Kontrollera att filen existerar eller inte existerar
if } ]]]; then
# om filen finns så ta bort filen
eval $command ${fn}
# Informera användaren om att filen har tagits bort
echo ”${fn} är raderad.”
Else
#Informera användaren om att filen inte finns
echo ”${fn} existerar inte.”
fi
done

Kör skriptet.

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

Här anges tre filnamn när skriptet körs. Resultatet visar att marks.docx och product.docx finns på den aktuella platsen och filerna tas bort och, item.txt finns inte på den aktuella platsen.

Slutsats

Varje bash-kommando kan exekveras av `eval`-kommandot genom att deklareras som en sträng. `eval`-kommandot används i den här handledningen för att utföra olika inbyggda kommandon i bash och skapa en rad variabler. Användningen av kommandot `eval` kommer att klargöras för användarna och de kommer att kunna använda kommandot för olika ändamål efter att ha läst denna handledning.

Lämna ett svar

Din e-postadress kommer inte publiceras.