Komenda eval Bash

`polecenie eval` jest używane w bash do wykonywania argumentów jak polecenie powłoki. Argumenty są łączone w łańcuch i brane jako wejście dla polecenia powłoki, by wykonać polecenie. `eval` wykonuje polecenie w bieżącej powłoce. Komenda ta jest przydatna gdy wymagane jest wykonanie jakiejkolwiek komendy zawierającej specjalny operator lub zarezerwowane słowa kluczowe. Komenda ta może być użyta w każdym skrypcie również tam, gdzie nazwa zmiennej jest nieznana do momentu wykonania skryptu. Ten samouczek pomoże użytkownikom Linuksa nauczyć się używania tej komendy.

Syntaktyka:

eval

Tutaj argumenty są parsowane i łączone w łańcuch, który zostanie wykonany przez powłokę. `eval` zwraca kod zakończenia po wykonaniu polecenia. `eval` zwraca 0 jako kod zakończenia, jeśli nie podano żadnego argumentu lub podano tylko argument null.

Przykład-1: Wykonanie polecenia `wc` przy użyciu `eval`

Załóżmy, że plik tekstowy o nazwie „dział.txt” zawiera następujący tekst. Całkowita liczba linii pliku może być policzona przez komendę `wc`.

department.txt

CSE
EEE
ETE
ENGLISH
BBA
PHARMACY

Następująca komenda zapisze komendę `wc` zliczającą całkowitą liczbę wierszy pliku department.txt do zmiennej, $mycommand.

$ mycommand=”wc -l department.txt”

Następująca komenda `eval` uruchomi komendę `wc` i wydrukuje całkowitą liczbę linii.

$ eval $mycommand

Wyjście:

Wyjście pokazuje, że plik department.txt ma 6 linii.

Przykład-2: Wykonaj polecenie `expr` używając `eval`

Utwórz plik bash o nazwie evaltest.sh i dodaj następujący skrypt. Ten skrypt przypisze dwie wartości całkowite do zmiennych $x i $y. Komendy `expr` i `echo` są przypisane do dwóch zmiennych, $c1 i $c2, które są wykonywane później za pomocą komendy `eval`.

evaltest.sh

#!/bin/bash
#Inicjalizujemy zmienne x i y
x=5
y=15
#Pierwsza zmienna komendy jest używana do przypisania komendy `expr` do dodania wartości $x i $y
c1=”`expr $x + $y`”
#Druga zmienna komendy służy do przypisania komendy `echo`
c2=”echo”
#`eval` obliczy i wypisze sumę $x i $y poprzez wykonanie poleceń zmiennych $c1
i $c2
eval $c2 $c1

Uruchom skrypt.

$ bash evaltest.sh

Suma 5 i 15 wynosi 20, co jest pokazane na wyjściu.

Przykład-3: Wypisanie wartości zmiennej, która jest przypisana w innej zmiennej

Utwórz skrypt basha o nazwie evaltest2.sh z następującym skryptem. Tutaj, jedna zmienna jest używana do przypisania nazwy innej zmiennej, która zawiera dane łańcuchowe. Polecenie `eval` wypisze wartość zmiennej, która zawiera nazwę innej zmiennej jako zawartość.

evaltest2.sh

#!/bin/bash
# Przypisz wartość łańcucha do zmiennej, $str1
str1=”Shell Script”
# Przypisz nazwę zmiennej, „str1” do zmiennej $str2
str2=str1
# Zapisz polecenie do zmiennej, $command
command=”echo”
# Komenda `eval` wykona komendę `echo` i wypisze wartość zmiennej
którą zawiera w innej zmiennej
eval $command \{$str2}

Run the script.

$ bash evaltest2.sh

Wypisywana jest wartość zmiennej, $str1.

Jest jeszcze jeden sposób dostępu do wartości zmiennej, której nazwa jest wartością innej zmiennej. Używając symbolu ’!’ można uzyskać dostęp do wartości tego typu zmiennej. Następujące polecenie może być użyte jako alternatywa poprzedniego skryptu, a wynik będzie taki sam.

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

Przykład-4: Utwórz serię zmiennych z wartościami i oblicz sumę wartości za pomocą polecenia `eval`

Utwórz skrypt basha o nazwie evaltest3.sh i dodaj do niego następujący skrypt. Ten skrypt utworzy serię zmiennych i zapisze wartości do zmiennych używając komendy `eval`. Wartości zmiennych zostaną dodane i zapisane w zmiennej o nazwie $sum. Następnie komenda `echo` z wartościami łańcuchowymi zostanie przypisana do zmiennej, która zostanie użyta w komendzie `eval` do wypisania wartości zmiennej $sum.

evaltest3.sh

#!/bin/bash
# Zainicjuj zmienną $sum wartością 0
sum=0
# Zadeklaruj pętlę for, która będzie iterować 4 razy
for n in {1..4}
do
# Utwórz cztery zmienne za pomocą polecenia eval
eval x$n=$n
# Dodaj wartości zmiennych z $sum
sum=$(($sum+$x$n))
done
# Przypisz polecenie `echo` z łańcuchem do zmiennej
command=”echo 'Wynik sumy='”
# Komenda `eval` wydrukuj wartość sumy używając zmiennych
eval $command $sum

Uruchom skrypt.

$ bash evaltest3.sh

Wypisana suma czterech zmiennych wynosi, 1+2+3+4=10.

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 do zmiennej tablicowej, $fn. Komenda `rm’ jest przechowywana w zmiennej, $command. Pętla for jest zadeklarowana tutaj do pobrania każdej nazwy pliku i usunięcia pliku przy użyciu komendy `eval`, jeśli plik istnieje.

evaltest4.sh

#!/bin/bash
#Deklaruj tablicę
deklaruj -.A fn
# Przeczytaj trzy argumenty wiersza poleceń i zapisz w trzech indeksach tablicy
fn=$1
fn=$2
fn=$3
# Zapisz polecenie usunięcia do zmiennej
command=”rm”
# Pętla for będzie iterować trzy razy, aby przeczytać trzy elementy tablicy
for index in 0 1 2
do
# Sprawdź, czy plik istnieje, czy nie
if } ]]; then
# if the file exists then remove the file
eval $command ${fn}
# Informuj użytkownika, że plik został usunięty
echo „${fn} is deleted.”
Else
#Informuj użytkownika, że plik nie istnieje
echo „${fn} not exist.”
fi
done

Uruchom skrypt.

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

W tym przypadku w czasie wykonywania skryptu podawane są trzy nazwy plików. Dane wyjściowe pokazują, że pliki marks.docx i product.docx istnieją w bieżącej lokalizacji i są usuwane, a plik item.txt nie istnieje w bieżącej lokalizacji.

Wnioski

Każde polecenie basha może być wykonane przez polecenie `eval` poprzez deklarację jako łańcuch. Komenda `eval` jest używana w tym tutorialu do wykonywania różnych wbudowanych komend basha i tworzenia serii zmiennych. Zastosowanie komendy `eval` zostanie wyjaśnione użytkownikom i będą oni w stanie używać tej komendy do różnych celów po przeczytaniu tego tutoriala.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.