Подстановка команд — это подстановка результатов выполнения команды [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
То есть имя занято, вы, конечно, можете его использовать, но с вызовом будут дополнительные сложности.
Вывод команды в переменную
Часто бывает нужно выполнить из скрипта команду и присвоить результат переменной.
Чтобы сделать это воспользуйтесь синтаксисом
Например, вам нужно проанализировать лог на количество ошибок и предупреждений