Az “eval” parancsot a bash-ben az argumentumok végrehajtására használják, mint egy shell parancsot. Az argumentumokat egy karakterláncban egyesítik, és a shell parancs bemenetként veszi a parancs végrehajtásához. Az `eval` a parancsot az aktuális shellben hajtja végre. Ez a parancs akkor hasznos, ha olyan parancsot kell végrehajtani, amely speciális operátort vagy foglalt kulcsszavakat tartalmaz. Ez a parancs bármely olyan szkriptben is használható, ahol a változó neve a szkript végrehajtásáig ismeretlen. Ez a bemutató segít a Linux-felhasználóknak megtanulni ennek a parancsnak a használatát.
Szintaktika:
Itt az argumentumok elemzése és kombinálása egy karakterlánccá történik, amelyet a shell végrehajt. Az `eval` a parancs végrehajtása után egy kilépési állapotkódot ad vissza. Az `eval` 0 kilépési állapotkódot ad vissza, ha nem adunk meg argumentumot, vagy csak null argumentumot.
Példa-1: A `wc` parancs végrehajtása az `eval` használatával
Tegyük fel, hogy egy “department.txt” nevű szövegfájl a következő szöveget tartalmazza. Az állomány összes sorának számát a `wc` paranccsal számolhatjuk meg.
osztály.txt
EEE
ETE
ENGLISH
BBA
PHARMACY
A következő parancs a $mycommand változóba tárolja a `wc` parancsot, hogy megszámolja a department.txt fájl összes sorát.
A következő `eval` parancs lefuttatja a `wc` parancsot és kiírja az összes sor számát.
Kimenet:
A kimenet azt mutatja, hogy department.txt fájlban 6 sor van.
Példa-2: Az `expr` parancs végrehajtása az `eval` használatával
Létrehoz egy bash fájlt evaltest.sh néven, és hozzáadja a következő szkriptet. Ez a szkript két egész értéket rendel a $x és $y változóhoz. Az `expr` és `echo` parancsokat két változóba, a $c1 és $c2 változóba rendeljük, amelyeket később az `eval` parancs segítségével hajtunk végre.
evaltest.sh
#Inicializáljuk az x és y változót
x=5
y=15
#Az első parancsváltozót az `expr` parancs hozzárendelésére használjuk, hogy a $x és $y értékeit összeadjuk
c1=”`expr $x + $y`”
#A második parancsot változót az `echo` parancs hozzárendelésére használjuk
c2=”echo”
#`eval` a $c1
és $c2 változók parancsainak végrehajtásával kiszámítja és kiírja $x és $y összegét
eval $c2 $c1
Futtassa a szkriptet.
Az 5 és a 15 összege 20, ami a kimeneten megjelenik.
3. példa: Egy másik változóhoz rendelt változó értékének kiírása
Készítsen egy evaltest2.sh nevű bash-szkriptet a következő szkript segítségével. Itt az egyik változót egy másik változó nevének hozzárendelésére használjuk, amely egy sztring adatot tartalmaz. Az `eval` parancs kiírja annak a változónak az értékét, amely egy másik változó nevét tartalmazza tartalomként.
evaltest2.sh
# Hozzárendel egy string értéket a változóhoz, $str1
str1=”Shell Script”
# Hozzárendeljük a változó nevét, “str1” a változóhoz $str2
str2=str1
#Tároljuk a parancsot a változóba, $command
command=”echo”
# Az `eval` parancs végrehajtja az `echo` parancsot, és kiírja a
változó értékét
a másik változóba
eval $command \${$str2}
Futtassa a szkriptet.
A $str1 változó értéke kiíródik.
Egy másik módon is hozzáférhetünk egy olyan változó értékéhez, amelynek neve egy másik változó értéke. A ‘!’ szimbólum használatával az ilyen típusú változó értéke érhető el. A következő parancs használható az előző szkript alternatívájaként, és a kimenet ugyanaz lesz.
4. példa: Értékekkel rendelkező változók sorozatának létrehozása és az értékek összegének kiszámítása az `eval` parancs segítségével
Készítsünk egy bash szkriptet evaltest3.sh néven, és adjuk hozzá a következő szkriptet. Ez a szkript létrehoz egy változókból álló sorozatot, és az értékeket az `eval` parancs segítségével tárolja a változókban. A változók értékeit összeadja és a $sum nevű változóba tárolja. Ezután a `echo` parancsot a string értékekkel egy változóba rendeljük, amelyet az `eval` parancsban a $sum változó értékének kiírására használunk.
evaltest3.sh
# A $sum változó inicializálása 0
sum=0
# Egy for ciklus deklarálása, amely 4 alkalommal fog iterálni
for n in {1….4}
do
# Hozzunk létre négy változót az eval parancs segítségével
eval x$n=$n
# Adjuk össze a változó értékeit a $summal
sum=$(($sum+$x$n))
done
# Adjuk ki a `echo` parancsot. stringgel egy változóba
command=”echo ‘Az összeg eredménye='”
# `eval` parancs kiírja az összeg értékét a változók segítségével
eval $command $sum
Futtassa a szkriptet.
A négy változó összege: 1+2+3+4=10, amely kiírásra kerül.
5. példa: Az `eval` parancs használata a fájlok listájának eltávolítására
Készítsen egy bash fájlt evaltest4.sh néven a következő szkriptet. Ez a szkript három parancssori argumentumot olvas be az eltávolítandó fájlnevekként, és az argumentumértékeket egy $fn nevű tömbváltozóba tárolja. Az `rm’ parancsot egy $command nevű változóban tárolja. A for ciklus itt van deklarálva az egyes fájlnevek lekérdezésére és a fájl eltávolítására az `eval` parancs segítségével, ha a fájl létezik.
evaltest4.sh
#Declare an array
declare -A fn
# Három parancssori argumentum beolvasása és tárolása a tömb három indexébe
fn=$1
fn=$2
fn=$3
# Az eltávolítási parancs tárolása egy változóba
command=”rm”
# for ciklus háromszor iterál három tömbelem beolvasásához
for index in 0 1 2
do
# A fájl létezésének vagy nem létezésének ellenőrzése
if } ]]; then
# ha a fájl létezik, akkor távolítsa el a fájlt
eval $command ${fn}
# Tájékoztatja a felhasználót, hogy a fájl eltávolításra került
echo “${fn} is deleted.”
Else
#Tájékoztatja a felhasználót, hogy a fájl nem létezik
echo “${fn} not exist.”
fi
done
Futtassa a szkriptet.
Itt három fájlnevet adunk meg a szkript végrehajtásakor. A kimenet azt mutatja, hogy a marks.docx és a product.docx fájlok léteznek az aktuális helyen, és a fájlok eltávolításra kerülnek, az item.txt pedig nem létezik az aktuális helyen.
Következtetés
Az `eval` paranccsal bármelyik bash parancs végrehajtható, ha stringként deklaráljuk. Az `eval` parancsot ebben a bemutatóban a bash különböző beépített parancsainak végrehajtására és egy sor változó létrehozására használjuk. Az `eval` parancs felhasználási módjai tisztázásra kerülnek a felhasználók számára, és a bemutató elolvasása után képesek lesznek ezt a parancsot különböző célokra használni.