Команды Linux

Команда Bash eval

Команда Bash eval
Команда 'eval' используется в bash для выполнения аргументов, таких как команда оболочки. Аргументы объединяются в строку и принимаются в качестве входных данных для команды оболочки для выполнения команды. 'eval' выполняет команду в текущей оболочке. Эта команда полезна, когда требуется выполнить любую команду, содержащую специальный оператор или зарезервированные ключевые слова. Эту команду можно использовать в любом скрипте, даже если имя переменной неизвестно до выполнения скрипта. Это руководство поможет пользователям Linux научиться пользоваться этой командой.

Синтаксис:

eval [аргумент…]

Здесь аргументы анализируются и объединяются в строку, которая будет выполняться оболочкой. 'eval' возвращает код статуса выхода после выполнения команды. 'eval' возвращает 0 как код статуса выхода, если аргумент не указан или предоставлен только нулевой аргумент.

Пример-1: выполнить команду wc с помощью eval

Предположим, текстовый файл с именем «отделение.текст»Содержит следующий текст. Общее количество строк в файле можно подсчитать с помощью команды wc.

отделение.текст

CSE
EEE
ETE
АНГЛИЙСКИЙ
BBA
АПТЕКА

Следующая команда сохранит команду wc для подсчета общего количества строк файла, отделение.текст к переменной, $ mycommand.

$ mycommand = "wc -l отдел.текст"

Следующая команда eval запустит команду wc и напечатает общее количество строк.

$ eval $ mycommand

Выход:

Вывод показывает, что отделение.текст файл имеет 6 строк.

Пример1-2: выполнить команду expr с помощью eval

Создайте файл bash с именем evaltest.ш и добавьте следующий скрипт. Этот скрипт присвоит два целых значения переменной $ x и $ y. Команды expr и echo назначаются двум переменным, $ c1 и $ c2, которые выполняются позже с помощью команды eval.

evaltest.ш

#!/ bin / bash
# Инициализировать переменные x и y
х = 5
у = 15
# Первая командная переменная используется для назначения команды expr для добавления значений $ x и $ y
c1 = "'выражение $ x + $ y'"
# Вторая командная переменная используется для назначения команды 'echo'
c2 = "эхо"
# 'eval' вычислит и напечатает сумму $ x и $ y, выполняя команды $ c1
и переменные $ c2
eval $ c2 $ c1

Запускаем скрипт.

$ bash evaltest.ш

Сумма 5 и 15 составляет 20, что показано на выходе.

Пример-3: Распечатать значение переменной, присвоенное другой переменной

Создайте сценарий bash с именем evaltest2.sh со следующим скриптом. Здесь одна переменная используется для присвоения имени другой переменной, содержащей строковые данные. Команда 'eval' напечатает значение переменной, которая содержит имя другой переменной в качестве содержимого.

evaltest2.ш

#!/ bin / bash
# Присваиваем переменной строковое значение $ str1
str1 = "Сценарий оболочки"
# Присвойте имя переменной «str1» переменной $ str2
str2 = str1
# Сохраняем команду в переменной $ command
command = "эхо"
# Команда 'eval' выполнит команду 'echo' и распечатает значение переменной
что содержится в другой переменной
eval $ command \ $ $ str2

Запускаем скрипт.

$ bash evaltest2.ш

Выводится значение переменной $ str1.

Есть еще один способ получить доступ к значению переменной, имя которой является значением другой переменной. С использованием '!'символ можно получить доступ к значению этого типа переменной. Следующую команду можно использовать как альтернативу предыдущему сценарию, и результат будет таким же.

$ str1 = "Сценарий оболочки"; str2 = str1; команда = "эхо"; eval $ command $ !str2

Пример-4: Создайте серию переменных со значениями и вычислите сумму значений с помощью команды eval

Создайте сценарий bash с именем evaltest3.sh и добавьте следующий скрипт. Этот скрипт создаст серию переменных и сохранит значения в переменных с помощью команды eval. Значения переменных будут добавлены и сохранены в переменной с именем $ sum. Затем команда 'echo' со строковыми значениями присваивается переменной, которая используется в команде 'eval' для печати значения переменной $ sum.

evaltest3.ш

#!/ bin / bash
# Инициализируем переменную $ sum значением 0
сумма = 0
# Объявить цикл for, который будет повторяться 4 раза
для n в 1… 4
делать
# Создайте четыре переменные с помощью команды eval
eval x $ n = $ n
# Добавляем значения переменной с помощью $ sum
сумма = $ (($ сумма + $ x $ n))
Выполнено
# Назначьте команду 'echo' со строкой в ​​переменную
command = "echo 'Результат суммы ='"
# Команда 'eval' распечатывает значение суммы, используя переменные
eval $ command $ sum

Запускаем скрипт.

$ bash evaltest3.ш

Сумма четырех переменных равна 1 + 2 + 3 + 4 = 10, что выводится на печать.

Пример-5: Использование команды eval для удаления списка файлов

Создайте файл bash с именем evaltest4.sh со следующим скриптом. Этот сценарий будет читать три аргумента командной строки как имена файлов, которые будут удалены, и сохранит значения аргументов в переменной массива, $ fn. Команда 'rm' хранится в переменной $ command. Здесь объявлен цикл For для получения каждого имени файла и удаления файла с помощью команды eval, если файл существует.

evaltest4.ш

#!/ bin / bash
# Объявить массив
объявить -A fn
# Прочитать три аргумента командной строки и сохранить в трех индексах массива
fn [0] = $ 1
fn [1] = $ 2
fn [2] = 3 доллара США
# Сохраните команду удаления в переменной
command = "rm"
# цикл for будет повторяться три раза, чтобы прочитать три элемента массива
для индекса в 0 1 2
делать
# Убедитесь, что файл существует или не существует
если [[-f $ fn [$ index]]]; тогда
# если файл существует, то удалить файл
eval $ command $ fn [$ index]
# Сообщаем пользователю, что файл удален
echo "$ fn [$ index] удалено."
Еще
# Сообщаем пользователю, что файл не существует
echo "$ fn [$ index] не существует."
фи
Выполнено

Запускаем скрипт.

$ bash evaltest4.отметки sh.элемент docx.txt продукт.docx

Здесь три имени файла предоставляются во время выполнения скрипта. Вывод показывает, что отметки.docx и продукт.docx существует в текущем месте, файлы будут удалены, а элемент.txt не существует в текущем месте.

Заключение

Любая команда bash может быть выполнена командой eval, объявив ее как строку. Команда 'eval' используется в этом руководстве для выполнения различных встроенных команд bash и создания серии переменных. Использование команды eval будет разрешено для пользователей, и они смогут использовать эту команду для различных целей после прочтения этого руководства.

Битва за Веснот 1.13.6 Выпущена разработка
Битва за Веснот 1.13.6, выпущенная в прошлом месяце, является шестой разработкой в ​​1.13.x и содержит ряд улучшений, в первую очередь пользовательско...
Как установить League Of Legends на Ubuntu 14.04
Если вы поклонник League of Legends, то это возможность для вас протестировать League of Legends. Обратите внимание, что LOL поддерживается в PlayOnLi...
Установите последнюю версию игры OpenRA Strategy в Ubuntu Linux
OpenRA - это игровой движок Libre / Free Real Time Strategy, воссоздающий ранние игры Westwood, такие как классическая Command & Conquer: Red Alert. Р...