Bash eval-kommando

`eval`-kommandoen bruges i bash til at udføre argumenter som en shell-kommando. Argumenter er samlet i en streng og tages som input til shell-kommandoen for at udføre kommandoen. `eval` udfører kommandoen i den aktuelle shell. Denne kommando er nyttig, når det er nødvendigt at udføre en kommando, der indeholder en særlig operatør eller reserverede nøgleord. Denne kommando kan også bruges i ethvert script, hvor variabelnavnet er ukendt, indtil scriptet udføres. Denne tutorial vil hjælpe Linux-brugere med at lære brugen af denne kommando.

Syntaks:

eval

Her analyseres argumenter og kombineres til en streng, der vil blive eksekveret af skallen. `eval` returnerer en exit-statuskode efter udførelse af kommandoen. `eval` returnerer 0 som exit-statuskode, hvis der ikke er angivet noget argument eller kun er angivet et nul-argument.

Eksempel-1: Udfør kommandoen `wc` ved hjælp af `eval`

Sæt, at en tekstfil ved navn “department.txt” indeholder følgende tekst. Det samlede antal linjer i filen kan tælles ved hjælp af kommandoen `wc`.

afdeling.txt

CSE
EEE
ETE
ENGLISH
BBA
PHARMACY

Følgende kommando vil gemme `wc` kommando til at tælle det samlede antal linjer i filen, department.txt til variablen, $mycommand.

$ mycommand=”wc -l department.txt”

Følgende `eval`-kommando vil køre `wc`-kommandoen og udskrive det samlede antal linjer.

$ eval $mycommand

Output:

Outputtet viser, at department.txt-filen har 6 linjer.

Eksempel-2: Udfør kommandoen `expr` ved hjælp af `eval`

Opret en bash-fil ved navn evaltest.sh og tilføj følgende script. Dette script tildeler to heltalsværdier til variablen $x og $y. Kommandoerne `expr` og `echo` tildeles i to variabler, $c1 og $c2, som senere udføres ved hjælp af kommandoen `eval`.

evaltest.sh

#!/bin/bash
#Initialisér variablerne x og y
x=5
y=15
#Den første kommandovariabel bruges til at tildele `expr`-kommandoen til at tilføje værdierne af $x og $y
c1=”`expr $x + $y`”
#Den anden kommando variabel bruges til at tildele kommandoen `echo`
c2=”echo”
##`eval` vil beregne og udskrive summen af $x og $y ved at udføre kommandoerne i variablerne $c1
og $c2
eval $c2 $c1

Kør scriptet.

$ bash evaltest.sh

Summen af 5 og 15 er 20, som vises i output.

Eksempel-3: Udskriv værdien af en variabel, der er tildelt i en anden variabel

Opret et bash-script ved navn evaltest2.sh med følgende script. Her bruges en variabel til at tildele navnet på en anden variabel, der indeholder en strengdata. Kommandoen `eval` vil udskrive værdien af den variabel, der indeholder navnet på en anden variabel, som indhold.

evaltest2.sh

#!/bin/bash
# Tildel en strengværdi til variablen $str1
str1=”Shell Script”
# Tildel variabelnavnet “str1” til variablen $str2
str2=str1
#Storage kommandoen i variablen, $command
command=”echo”
# Kommandoen `eval` vil udføre kommandoen `echo` og udskrive værdien af den variabel
der indeholder i en anden variabel
eval $command \${$str2}

Kør scriptet.

$ bash evaltest2.sh

Værdien af variablen $str1 bliver udskrevet.

Der er en anden måde at få adgang til værdien af en variabel, hvis navn er værdien af en anden variabel. Ved hjælp af symbolet ‘!’ kan man få adgang til værdien af denne type variabel. Følgende kommando kan bruges som et alternativ til det foregående script, og resultatet vil være det samme.

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

Eksempel-4: Opret en række variabler med værdier og beregn summen af værdierne ved hjælp af kommandoen `eval`

Opret et bash-script ved navn evaltest3.sh og tilføj følgende script. Dette script vil oprette en række variabler og gemme værdierne i variablerne ved hjælp af kommandoen `eval`. Værdierne af variablerne vil blive lagt sammen og gemt i en variabel ved navn $sum. Dernæst tildeles kommandoen `echo` med strengværdier til en variabel, som bruges i kommandoen `eval` til at udskrive værdien af variablen $sum.

evaltest3.sh

#!/bin/bash
# Initialiser variablen $sum med værdien 0
sum=0
# Deklarér en for-løkke, der vil iterere 4 gange
for n i {1..4}
do
# Opret fire variabler ved hjælp af eval-kommandoen
eval x$n=$n
# Tilføj værdierne af variablen med $sum
sum=$(($sum+$x$n))
done
# Tildel kommandoen `echo` med streng til en variabel
kommando=”echo ‘The result of the sum='”
# `eval`-kommando udskriver summen værdi ved hjælp af variabler
eval $kommando $sum

Kør scriptet.

$ bash evaltest3.sh

Summen af de fire variabler er, 1+2+3+4+4=10, der udskrives.

Eksempel-5: Brug af `eval`-kommandoen til at fjerne listen over filer

Opret en bash-fil ved navn evaltest4.sh med følgende script. Dette script vil læse tre kommandolinjeargumenter som filnavne, der skal fjernes, og gemme argumentværdierne i en arrayvariabel, $fn. `rm’-kommandoen gemmes i en variabel, $command. For-sløjfen er erklæret her for at hente hvert filnavn og fjerne filen ved hjælp af kommandoen `eval`, hvis filen findes.

evaltest4.sh

#!/bin/bash
#Deklarere et array
deklarere -A fn
# Læs tre kommandolinjeargumenter og gem i tre indeks i arrayet
fn=$1
fn=$2
fn=$3
# Gem fjernkommandoen i en variabel
command=”rm”
# for loop vil iterere tre gange for at læse tre arrayelementer
for index in 0 1 2
do
# Check filen eksisterer eller ikke eksisterer
if } ]]]; then
# hvis filen findes, fjernes filen
eval $command ${fn}
# Informer brugeren om, at filen er fjernet
echo “${fn} er slettet.”
Else
#Informér brugeren om, at filen ikke findes
echo “${fn} findes ikke.”
fi
done

Kør scriptet.

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

Her angives tre filnavne på tidspunktet for udførelse af scriptet. Output viser, at marks.docx og product.docx findes på den aktuelle placering, og filerne er fjernet, og, item.txt findes ikke på den aktuelle placering.

Konklusion

En hvilken som helst bash-kommando kan udføres af kommandoen `eval` ved at deklarere som en streng. `eval`-kommandoen bruges i denne vejledning til at udføre forskellige indbyggede kommandoer i bash og skabe en række variabler. Brugen af `eval`-kommandoen vil blive klarlagt for brugerne, og de vil være i stand til at bruge denne kommando til forskellige formål efter at have læst denne tutorial.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.