Возврат значения из внешней операции в сценарии оболочки Linux

Вопрос или проблема

Я пишу оболочечный скрипт на Bash. В терминале Bash я использую команды “CLI” для выполнения некоторых функций. В этом примере я создаю модель, которая, если синтаксис правильный, вернет шестнадцатеричное значение, которое мне нужно использовать в следующем процессе скрипта. Вот начало скрипта Bash:
#!/bin/sh

Я выполняю множество команд CLI для заполнения переменных, чтобы создать новую модель. Вот полная команда CLI для создания модели:
${CLIPATH}/create model mth=0xd70002 attr=0x1006e,val=”${FNAME}” attr=0xd70000,val=”${MTL}”

Все переменные были заполнены в предыдущих строках скрипта.

После выполнения этой команды ‘create’ она возвращает следующую строку:
создана модель, дескриптор = 0x2004332“, где 0x2004332 — это возвращаемое значение, которое мне нужно использовать в следующей части скрипта.

Как я могу захватить это значение? “создана модель, дескриптор = ” — это то, что всегда отображается. Шестнадцатеричное число — это то, что мы называем “дескриптором модели” новой модели, которую я только что создал. Мне нужно “связать” вывод команды “create” с другим дескриптором модели… но я не могу сделать это, пока не смогу поместить вывод (0x2004332 в этом примере) в переменную для использования на следующем шаге.

Ответ или решение

Для захвата значения, возвращаемого внешней операцией в Bash-скрипте, вам нужно перенаправить стандартный вывод команды в переменную, а затем использовать инструменты обработки текста для извлечения нужного значения. В вашем случае после выполнения команды создания модели, которая возвращает строку вида "created model handle = 0x2004332", вам необходимо использовать это значение для дальнейших действий в скрипте.

Вот пример того, как вы можете это реализовать:

#!/bin/sh

# Выполнение команды для создания модели и захват вывода
output=$(${CLIPATH}/create model mth=0xd70002 attr=0x1006e,val="${FNAME}" attr=0xd70000,val="${MTL}")

# Извлечение значения модели с помощью grep и awk
model_handle=$(echo "$output" | grep -o '0x[0-9a-fA-F]*')

# Проверка результата и вывод
if [ -n "$model_handle" ]; then
    echo "Успешно получен handle модели: $model_handle"
    # Здесь вы можете продолжить использовать $model_handle в других процессах вашего скрипта
else
    echo "Ошибка: не удалось получить handle модели"
fi

Пояснение кода:

  1. Выполнение команды: Вы используете подстановку команд (используя $()) для выполнения вашей команды создания модели и захвата её вывода в переменной output.

  2. Извлечение значения: Затем вы используете grep с параметром -o, чтобы отобразить только ту часть строки, которая соответствует шаблону шестнадцатеричного числа (например, 0x2004332). Регулярное выражение '0x[0-9a-fA-F]*' ищет все шестнадцатеричные числа, начинающиеся с 0x.

  3. Проверка результата: Скрипт проверяет, не пустая ли переменная model_handle. Если она не пустая, выводится сообщение об успешном получении значения handle модели, в противном случае сообщается об ошибке.

С помощью этого подхода вы сможете захватить и использовать значение, возвращаемое вашей командой, в дальнейшем потоке вашего скрипта.

Оцените материал
Добавить комментарий

Капча загружается...