Linux присвоить переменной результат выполнения команды

Глава 14. Подстановка команд

Подстановка команд — это подстановка результатов выполнения команды [1] или даже серии команд; буквально, эта операция позволяет вызвать команду в другом окружении.

Классический пример подстановки команд — использование обратных одиночных кавычек (`. `). Команды внутри этих кавычек представляют собой текст командной строки.

Вывод от команд может использоваться: как аргумент другой команды, для установки значения переменной и даже для генерации списка аргументов цикла for.

Подстанавливаемая команда может получиться разбитой на отдельные слова.

Даже когда не происходит разбиения на слова, операция подстановки команд может удалять завершающие символы перевода строки.

При выводе значений переменных, полученных в результате подстановки команд, командой echo, без кавычек, символы перевода строки будут удалены. Это может оказаться неприятным сюрпризом.

Подстановка команд позволяет даже записывать в переменные содержимое целых файлов, с помощью перенаправления или команды cat.

Не используйте переменные для хранения содержимого текстовых файлов большого объема, без веских на то оснований. Не записывайте в переменные содержимое бинарных файлов, даже шутки ради.

Пример 14-1. Глупая выходка

Обратите внимание: в данной ситуации не возникает ошибки переполнения буфера . Этот пример показывает превосходство защищенности интерпретирующих языков, таких как Bash, от ошибок программиста, над компилирующими языками программирования.

Подстановка команд, позволяет записать в переменную результаты выполнения цикла. Ключевым моментом здесь является команда echo, в теле цикла.

Пример 14-2. Запись результатов выполнения цикла в переменную

Подстановка команд позволяет существенно расширить набор инструментальных средств, которыми располагает Bash. Суть состоит в том, чтобы написать программу или сценарий, которая выводит результаты своей работы на stdout (как это делает подавляющее большинство утилит в UNIX) и записать вывод от программы в переменную.

Альтернативой обратным одиночным кавычкам, используемым для подстановки команд, можно считать такую форму записи: $(COMMAND).

Источник

Как сохранить вывод команды Linux в переменной

Оригинал: How To Assign Output of a Linux Command to a Variable
Автор: Aaron Kili
Дата публикации: 19 января 2017 года
Перевод: А. Кривошей
Дата перевода: январь 2018 г.

Обычно при работе команды Linux выводят на консоль определенную информацию: результат работы программы, либо сообщение о статусе/ошибке выполнения программы. При необходимости вы можете сохранить вывод команды в переменной, которая будет использоваться в последующих операциях.

В этой статье мы рассмотрим различные способы сохранения вывода команды оболочки в переменной, особенно это полезно при создании скриптов оболочки.

Для сохранения вывода команды в переменной вы можете использовать возможность замены команды оболочки в следующих формах:

Ниже приведены несколько примеров использования подстановки команд.

В этом первом примере мы будем хранить значение команды who (которая показывает, кто авторизован в системе) в переменной CURRENT_USERS:

Затем мы можем использовать переменную в предложении, выводимом с помощью команды echo:

В приведенной выше команде флаг -e означает интерпретацию любых управляющих последовательностей (например, \n для новой строки). Чтобы избежать потери времени и памяти, просто выполните подстановку в команде echo следующим образом:

Затем, чтобы продемонстрировать концепцию использования второй формы, мы можем сохранить общее количество файлов в текущем рабочем каталоге в переменной под названием FILES и использовать ее позже следующим образом:

О перенаправлении вывода команд Linux вы можете подробнее узнать в следующих статьях на нашем сайте:

Источник

Bash Scripting

Введение

Перед тем как читать эту статью убедитесь, что вы знакомы с содержанием статьи «Основы Bash»

Основы

В начале скрипта нужно указать #!/bin/bash и желательно какой-то коментарий о назначении скрипта

#!/bin/bash # Пример комментария

Переменные

Допустим мы хотим вызвать скрипт из файла script_1 и передать туда какую-то переменную, а затем записать её в лог

#!/bin/bash # Читаем из терминала и записываем в лог echo $1

echo $1 означает, что мы возьмём первую переменную

/ означает, что файл log.txt будет в домашней директории

Как вызвать скрипт

Первым делом нужно убедиться, что файл script_1 является исполняемым

Если вы находитесь в той же диретории, что и script_1 выполните

-rw-rw-r—. 1 andrei andrei 5252 Nov 26 12:27 script_1

Если четвёртый символ это то файл не является исполняемым.

Сделать его исполняемым можно командой

chmod u+x script_1

-rwxrw-r—. 1 andrei andrei 5252 Nov 26 12:29 script_1

Обратите внимание на -rwx теперь четвёртый символ это x

В моей CentOS настроена подсветка исполняемых файлов, поэтому он теперь зелёный

Теперь выполнить скрипт можно командой

Конкретно этот скрипт должен принимать аргументы из командной строки , поэтому мы выполним

./script_1 word1 word2

word1 добавится в log.txt а word2 нет, потому что word1 это первый аргумент а word2 второй.

Чтобы записывать вообще все аргументы заменим $1 на $*

Добавим в лог время выполнения команд (подробности здесь)

#!/bin/bash # Читаем из терминала и записываем в лог echo $(date + «%Y-%m-%d %H:%M:%S,%3N») $*

./script_1 one two three
cat log.txt

2020-09-20 17:48:27,404 one two three

Как вызвать скрипт из другого скрипта

Допустим из скрипта parent.sh вам нужно вызвать скрипт child.sh

#!/bin/bash # parent bash ./child.sh

Это если они в одной директории, если в разных — пишите путь до скрипта

Как назвать скрипт

Проверить не занято ли имя системой можно командой type.

Например, вы решили назвать свой скрипт test

test is a shell builtin

То есть имя занято, вы, конечно, можете его использовать, но с вызовом будут дополнительные сложности.

Вывод команды в переменную

Часто бывает нужно выполнить из скрипта команду и присвоить результат переменной.

Чтобы сделать это воспользуйтесь синтаксисом

Например, вам нужно проанализировать лог на количество ошибок и предупреждений

#!/bin/bash ERROR=$ (grep -o -i ERROR 2021-10-10-log.txt | wc -l ) WARNING=$ (grep -o -i WARNING 2021-10-10-log.txt | wc -l ) echo «Ошибок: $ERROR; Предупреждений: $ WARNING»

wc это команда, которая подсчитывает число слов

Аргументы из командной строки

Скрипт может принимать аргументы из командной строки

Первый аргумент обозначается как $1 второй как $2 и так далее

Рассмотрим пример ar.sh

#!/bin/bash AR=$1 echo $AR $AR $AR

Этот скрипт ждёт один внешний аргумент и присваивает его значение переменной AR

Затем это же значение выводится три раза

В C аналогичную функцию выполняет int argc, char* argv[]

Цикл for

В самом привычном виде цикл for можно записать так

#!/bin/bash for i in `seq 0 9`; do echo $i done

Объединить строки

Конкатенация строк может быть сделана следующим образом

#!/bin/bash STR1=»heihei» STR2=».ru» STR3=$STR1$STR2 echo $STR3

Источник

Читайте также:  0x800700df размер файла превышает установленное ограничение windows 10
Оцените статью