Příkaz Bash eval

Příkaz `eval` se v bashi používá ke spuštění argumentů jako příkaz shellu. Argumenty se spojí do řetězce a jsou brány jako vstup pro příkaz shellu, který příkaz provede. Příkaz `eval` provede příkaz v aktuálním shellu. Tento příkaz je užitečný, pokud je třeba provést nějaký příkaz, který obsahuje speciální operátor nebo vyhrazená klíčová slova. Tento příkaz lze použít i v libovolném skriptu, kde je jméno proměnné neznámé až do spuštění skriptu. Tento návod pomůže uživatelům Linuxu naučit se používat tento příkaz.

Syntaxe:

eval

Příkazy jsou zde analyzovány a spojeny do řetězce, který shell vykoná. Po provedení příkazu `eval` vrací stavový kód ukončení. Pokud není zadán žádný argument nebo je zadán pouze nulový argument, vrátí `eval` jako kód ukončení 0.

Příklad-1: Provedení příkazu `wc` pomocí `eval`

Předpokládejme, že textový soubor s názvem „department.txt“ obsahuje následující text. Celkový počet řádků souboru lze spočítat pomocí příkazu `wc`.

oddělení.txt

CSE
EEE
ETE
ENGLISH
BBA
PHARMACY

Následující příkaz uloží příkaz `wc` pro spočítání celkového počtu řádků souboru department.txt do proměnné $mycommand.

$ mycommand=“wc -l department.txt“

Následující příkaz `eval` spustí příkaz `wc` a vypíše celkový počet řádků.

$ eval $mycommand

Výstup:

Výstup ukazuje, že department.txt soubor má 6 řádků.

Příklad-2: Proveďte příkaz `expr` pomocí `eval`

Vytvořte soubor bash s názvem evaltest.sh a přidejte následující skript. Tento skript přiřadí dvě celočíselné hodnoty do proměnných $x a $y. Příkazy `expr` a `echo` se přiřadí do dvou proměnných $c1 a $c2, které se později provedou pomocí příkazu `eval`.

evaltest.sh

#!/bin/bash
#Inicializujte proměnné x a y
x=5
y=15
#První proměnná příkazu slouží k přiřazení příkazu `expr`, který sečte hodnoty $x a $y
c1=“`expr $x + $y`“
#Druhý příkaz. proměnná slouží k přiřazení příkazu `echo`
c2=“echo“
#`eval` vypočítá a vypíše součet $x a $y provedením příkazů proměnných $c1
a $c2
eval $c2 $c1

Spustíme skript.

$ bash evaltest.sh

Součet 5 a 15 je 20, který se zobrazí na výstupu.

Příklad-3: Vypište hodnotu proměnné, která je přiřazena v jiné proměnné

Vytvořte skript bash s názvem evaltest2.sh s následujícím skriptem. Zde je jedné proměnné přiřazen název jiné proměnné, která obsahuje řetězcový údaj. Příkaz `eval` vypíše jako obsah hodnotu proměnné, která obsahuje jméno jiné proměnné.

evaltest2.sh

#!/bin/bash
# Přiřaďte do proměnné řetězcovou hodnotu $str1
str1=“Shell Script“
# Přiřaďte název proměnné „str1“ do proměnné $str2
str2=str1
#Uložte příkaz do proměnné, $command
command=“echo“
# Příkaz `eval` provede příkaz `echo` a vypíše hodnotu proměnné
kterou obsahuje v jiné proměnné
eval $command \${$str2}

Spustíme skript.

$ bash evaltest2.sh

Vypíše se hodnota proměnné $str1.

Existuje ještě jeden způsob přístupu k hodnotě proměnné, jejíž jméno je hodnotou jiné proměnné. Pomocí symbolu ‚!“ lze přistupovat k hodnotě tohoto typu proměnné. Následující příkaz lze použít jako alternativu předchozího skriptu a výstup bude stejný.

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

Příklad-4: Vytvořte řadu proměnných s hodnotami a vypočítejte součet hodnot pomocí příkazu `eval`

Vytvořte skript bash s názvem evaltest3.sh a přidejte následující skript. Tento skript vytvoří řadu proměnných a uloží do nich hodnoty pomocí příkazu `eval`. Hodnoty proměnných budou sečteny a uloženy do proměnné s názvem $sum. Dále se do proměnné přiřadí příkaz `echo` s řetězcovými hodnotami, který se použije v příkazu `eval` k vypsání hodnoty proměnné $sum.

evaltest3.sh

#!/bin/bash
# Inicializujte proměnnou $sum hodnotou 0
sum=0
# Deklarujte cyklus for, který bude iterovat 4krát
pro n v {1..4}
do
# Vytvořte čtyři proměnné pomocí příkazu eval
eval x$n=$n
# Sečtěte hodnoty proměnné s $sum
sum=$(($sum+$x$n))
done
# Přiřaďte příkaz `echo`. s řetězcem do proměnné
příkaz=“echo ‚Výsledek součtu='“
# Příkaz `eval` vypíše hodnotu součtu pomocí proměnných
eval $příkaz $součet

Spustit skript.

$ bash evaltest3.sh

Součet čtyř proměnných je, 1+2+3+4=10, který se vypíše.

Příklad-5: Použití příkazu `eval` k odstranění seznamu souborů

Vytvořte soubor bash s názvem evaltest4.sh s následujícím skriptem. Tento skript načte tři argumenty příkazového řádku jako názvy souborů, které budou odstraněny, a hodnoty argumentů uloží do proměnné pole $fn. Příkaz `rm‘ je uložen v proměnné $command. Zde je deklarována smyčka pro načtení každého jména souboru a odstranění souboru pomocí příkazu `eval`, pokud soubor existuje.

evaltest4.sh

#!/bin/bash
#Deklarovat pole
deklarovat -.A fn
# Načteme tři argumenty příkazového řádku a uložíme do tří indexů pole
fn=$1
fn=$2
fn=$3
# Uložíme příkaz remove do proměnné
command=“rm“
# for cyklus bude iterovat třikrát pro načtení tří prvků pole
for index in 0 1 2
do
# Zkontrolujeme, zda soubor existuje nebo neexistuje
if } ]]; then
# pokud soubor existuje, pak jej odstraňte
eval $command ${fn}
# Informujte uživatele, že soubor je odstraněn
echo „${fn} je odstraněn.“
Else
#Informujte uživatele, že soubor neexistuje
echo „${fn} neexistuje.“
fi
done

Spustit skript.

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

Zde jsou při spuštění skriptu uvedeny tři názvy souborů. Výstup ukazuje, že soubory marks.docx a product.docx existují v aktuálním umístění a jsou odstraněny a, item.txt neexistuje v aktuálním umístění.

Závěr

Každý příkaz jazyka bash může být proveden příkazem `eval` deklarováním jako řetězec. Příkaz `eval` je v tomto návodu použit pro spouštění různých vestavěných příkazů bashe a vytvoření řady proměnných. Použití příkazu `eval` bude uživatelům objasněno a po přečtení tohoto tutoriálu budou moci tento příkaz používat k různým účelům.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.