Składnia:
eval [argument… ]Tutaj argumenty są analizowane i łączone w łańcuch, który zostanie wykonany przez powłokę. 'eval' zwraca kod statusu wyjścia po wykonaniu polecenia. 'eval' zwraca 0 jako kod statusu wyjścia, jeśli nie podano argumentu lub podano tylko pusty argument.
Przykład-1: Wykonaj polecenie „wc” za pomocą „eval”
Załóżmy, że plik tekstowy o nazwie „departament.tekst” zawiera następujący tekst. Całkowitą liczbę wierszy pliku można policzyć za pomocą polecenia „wc”'.
departament.tekst
CSEEEE
ETE
JĘZYK ANGIELSKI
BBA
APTEKA
Następujące polecenie zapisze polecenie 'wc', aby zliczyć całkowitą liczbę wierszy pliku, departament.tekst do zmiennej, $mojepolecenie.
$ mycommand="wc -l dział.tekst"Następujące polecenie 'eval' uruchomi polecenie 'wc' i wyświetli całkowitą liczbę wierszy.
$ eval $moja komendaWynik:
Dane wyjściowe pokazują, że departament.tekst plik ma 6 wierszy.
Przykład-2: Wykonaj polecenie „expr” za pomocą „eval”
Utwórz plik bash o nazwie ewaluacja.cii i dodaj następujący skrypt. Ten skrypt przypisze dwie wartości całkowite do zmiennej $x i $y. Polecenia „expr” i „echo” są przypisane do dwóch zmiennych, $c1 i $c2, które są wykonywane później za pomocą polecenia „eval”.
ewaluacja.cii
#!/bin/bash#Zainicjuj zmienną x i y
x=5
y=15
#Pierwsza zmienna polecenia służy do przypisania polecenia 'expr' w celu dodania wartości $x i $y
c1="'wyrażenie $x + $y'"
#Druga zmienna polecenia służy do przypisania polecenia „echo”
c2="echo"
#'eval' obliczy i wypisze sumę $x i $y, wykonując polecenia $c1
oraz zmienne $c2
oszacowanie $c2 $c1
Uruchom skrypt.
$ bash evaltest.ciiSuma 5 i 15 to 20, która jest pokazana na wyjściu.
Przykład-3: Wydrukuj wartość zmiennej, która jest przypisana w innej zmiennej
Utwórz skrypt bash o nazwie evaltest2.sh z następującym skryptem. W tym przypadku jedna zmienna służy do przypisania nazwy innej zmiennej zawierającej ciąg danych. Polecenie 'eval' wypisze wartość zmiennej, która jako zawartość zawiera nazwę innej zmiennej.
evaltest2.cii
#!/bin/bash# Przypisz wartość ciągu do zmiennej $str1
str1="Skrypt powłoki"
# Przypisz nazwę zmiennej „str1” do zmiennej $str2
str2=str1
#Zapisz polecenie w zmiennej $command
polecenie="echo"
# Komenda 'eval' wykona polecenie 'echo' i wyświetli wartość zmiennej
która zawiera inną zmienną
eval $polecenie \$$str2
Uruchom skrypt.
$ bash evaltest2.ciiWypisywana jest wartość zmiennej $str1.
Istnieje inny sposób uzyskania dostępu do wartości zmiennej, której nazwa jest wartością innej zmiennej. Za pomocą '!' symbol wartość tego typu zmiennej jest dostępna. Poniższego polecenia można użyć jako alternatywy dla poprzedniego skryptu, a wynik będzie taki sam.
$ str1="Skrypt powłoki"; słowo2=sł1; polecenie="echo"; eval $polecenie $!str2Przykład-4: Utwórz serię zmiennych z wartościami i oblicz sumę wartości za pomocą polecenia „ocena”
Utwórz skrypt bash o nazwie evaltest3.sh i dodaj następujący skrypt. Ten skrypt utworzy serię zmiennych i zapisze wartości w zmiennych za pomocą polecenia „eval”. Wartości zmiennych zostaną dodane i zapisane w zmiennej o nazwie $sum. Następnie polecenie „echo” z wartościami ciągu jest przypisywane do zmiennej, która jest używana w poleceniu „eval” do wypisania wartości zmiennej $sum.
test oceny3.cii
#!/bin/bash# Zainicjuj zmienną $sum wartością 0
suma=0
# Zadeklaruj pętlę for, która będzie iterować 4 razy
dla n w 1… 4
zrobić
# Utwórz cztery zmienne za pomocą polecenia eval
oszacowanie x$n=$n
# Dodaj wartości zmiennej za pomocą $sum
suma=$(($suma+$x$n))
gotowy
# Przypisz polecenie 'echo' z ciągiem do zmiennej
command="echo 'Wynik sumy=""
# polecenie 'eval' wypisz wartość sumy za pomocą zmiennych
eval $polecenie $sum
Uruchom skrypt.
$ bash evaltest3.ciiSuma czterech zmiennych wynosi 1+2+3+4=10, która jest wypisywana.
Przykład-5: Użycie polecenia 'eval' do usunięcia listy plików
Utwórz plik bash o nazwie evaltest4.sh z następującym skryptem. Ten skrypt odczyta trzy argumenty wiersza poleceń jako nazwy plików, które zostaną usunięte i przechowa wartości argumentów w zmiennej tablicowej $fn. Polecenie 'rm' jest przechowywane w zmiennej $command. W tym miejscu zadeklarowana jest pętla For, która pobiera każdą nazwę pliku i usuwa plik za pomocą polecenia 'eval', jeśli plik istnieje.
evaltest4.cii
#!/bin/bash#Zadeklaruj tablicę
zadeklaruj -A fn
# Odczytaj trzy argumenty wiersza poleceń i zapisz je w trzech indeksach tablicy
fn[0]=1 USD
fn[1]=2 USD
fn[2]=3 USD
# Zapisz polecenie usuwania w zmiennej
polecenie = "rm"
# Pętla for wykona trzykrotną iterację, aby odczytać trzy elementy tablicy
dla indeksu w 0 1 2
zrobić
# Sprawdź, czy plik istnieje, czy nie istnieje
if [[ -f $fn[$indeks] ]]; następnie
# jeśli plik istnieje, usuń plik
eval $polecenie $fn[$index]
# Poinformuj użytkownika, że plik został usunięty
echo „$fn[$index] zostało usunięte."
Jeszcze
#Poinformuj użytkownika, że plik nie istnieje
echo "$fn[$index] nie istnieje."
fi
gotowy
Uruchom skrypt.
$ bash evaltest4.sh znaki.pozycja docx.produkt txt.docxTutaj podczas wykonywania skryptu podawane są trzy nazwy plików. Dane wyjściowe pokazują, że znaki.docx i produkt.docx istnieje w bieżącej lokalizacji, a pliki są usuwane i, item.txt nie istnieje w bieżącej lokalizacji.
Wniosek
Każde polecenie bash można wykonać poleceniem 'eval', deklarując jako ciąg. Polecenie „eval” jest używane w tym samouczku do wykonywania różnych wbudowanych poleceń bash i tworzenia serii zmiennych. Użycie polecenia „eval” zostanie usunięte dla użytkowników i będą mogli używać tego polecenia do różnych celów po przeczytaniu tego samouczka.