Различные типы команд bash необходимо запускать с терминала в зависимости от требований пользователя. Когда пользователь запускает любую команду с терминала, он показывает вывод, если ошибки не существует, в противном случае отображается сообщение об ошибке. Иногда выходные данные команды необходимо сохранить в переменной для использования в будущем. Для этой цели можно использовать функцию подстановки команд оболочки в bash. В этом руководстве показано, как с помощью этой функции можно сохранять в переменной различные типы команд оболочки.
Переменная= $(команда)Переменная= $(команда [вариант…]аргумент1 аргумент2 ...)
Переменная= $(/дорожка/к/команда)
ИЛИ
Переменнаязнак равно``команда``
Переменнаязнак равно``команда [вариант…]аргумент1 аргумент2 ...``
Переменнаязнак равно`/дорожка/к/команда``
*** Примечание. Не используйте пробелы до и после знака равенства при использовании приведенных выше команд.
Вывод одной команды в переменную
Команды Bash могут использоваться без каких-либо параметров и аргументов для тех команд, где эти части являются необязательными. В следующих двух примерах показано использование простой подстановки команд.
Пример №1:
bash ` дата команда используется для отображения текущей даты и времени. Следующий скрипт сохранит вывод ` дата команду в $ текущая дата переменная с помощью подстановки команд.
$текущая дата= $(Дата)
$выбросил 'Сегодня$ current_date'
Выход:
Пример №2:
`pwd` команда показывает путь к текущему рабочему каталогу. Следующий скрипт сохраняет вывод `pwd` команду в переменную, $ current_dir и значение этой переменной печатается с использованием `эхо` команда.
$current_dirзнак равно``pwd``$выбросил 'Текущий каталог:$ current_dir'
Выход:
Команда с опцией и аргументом
Параметр и аргумент являются обязательными для некоторых команд bash. В следующих примерах показано, как можно сохранить вывод команды с параметром и аргументом в переменной.
Пример № 3:
Баш ` Туалет Команда используется для подсчета общего количества строк, слов и символов любого файла. Эта команда использует -c, -w и -l в качестве параметра и имя файла в качестве аргумента для генерации вывода. Создайте текстовый файл с именем fruit.txt со следующими данными для проверки следующего скрипта.
fruit.txt
манго
апельсин
Банан
Виноград
Гуава
яблоко
Выполните следующие команды, чтобы подсчитать и сохранить общее количество слов в fruit.txt файл в переменную, $ count_words и распечатайте значение, используя ` эхо команда.
$count_wordsзнак равно``Туалет -вfruit.txt``$выбросил 'Общее количество слов в файле fruit.txt равно$ count_words'
Выход:
Пример №4:
`вырезать` это еще одна команда bash, которая использует параметр и аргумент для генерации вывода. Создайте текстовый файл с именем weekday.txt с названиями семи дней недели для запуска следующего скрипта.
weekday.txt
понедельниквторник
среда
четверг
Пятница
Суббота
Воскресенье
Создайте файл bash с именем cmdsub1.sh со следующим сценарием. В этом сценарии в то время как цикл используется для чтения содержимого weekday.txt файл построчно и прочтите первые три символа каждой строки, используя ` вырезать команда. После вырезания строковое значение сохраняется в переменной $ день . Затем, если оператор используется для проверки значения $ день является ' Солнце' или не. На выходе будет напечатано ‘ Воскресенье праздник ‘Когда, если условие истинно, иначе будет напечатано значение $ день .
cmdsub1.sh
#! / bin / bashимя файлазнак равно'weekday.txt'
в то время как читатьлиния;делать
деньзнак равно``выбросил $ линия | резать -c 1-3``
если [ $ день=='Солнце' ]
тогда
выбросил 'Воскресенье - праздник'
еще
выбросил $ день
быть
сделано<$ filename
Запускаем скрипт.
$Котweekday.txt$трепатьcmdsub1.sh
Выход:
Использование подстановки команд в цикле
Вы можете сохранить вывод подстановки команды в любую переменную цикла, которая показана в следующем примере.
Пример 5:
Создайте файл с именем cmdsub2.sh со следующим кодом. Здесь ` ls -d * / Команда `используется для получения всего списка каталогов из текущего каталога. Здесь цикл For используется для чтения каждого каталога из вывода и сохранения его в переменной $ dirname который печатается позже.
cmdsub2.sh
#! / bin / bashдля dirname в$(ls -d * /)
делать
выбросил '$ dirname'
сделано
Запускаем скрипт.
$трепатьcmdsub2.shВыход:
Использование вложенных команд
Как вы можете использовать несколько команд с помощью вертикальной черты (|), показано в предыдущем примере. Но вы можете использовать вложенные команды при подстановке команд, где вывод первой команды зависит от вывода второй команды и работает противоположно команде pipe (|).
Синтаксис вложенной команды:
кудазнак равно``command1 ``команда``Пример # 6:
Две команды, ` выбросил `и` кто `используются в этом примере как вложенная команда. Здесь ` кто Сначала будет выполнена команда `, которая распечатает информацию о текущем вошедшем в систему пользователе. Вывод команды ` кто `команда будет выполняться` выбросил `команда и вывод` выбросил `будет сохраняться в переменной $ var . Здесь вывод ` выбросил Команда `зависит от вывода` кто `команда.
$кудазнак равно``выбросил``кто``$выбросил $ var
Выход:
Использование пути к команде
Если вы знаете путь к команде, вы можете запустить команду, указав путь к команде при использовании подстановки команд. В следующем примере показано использование пути к команде.
Пример # 7:
`whoami` Команда показывает имя пользователя, вошедшего в систему в данный момент. По умолчанию эта команда хранится в / usr / являюсь/ папка. Запустите следующий сценарий, чтобы запустить ` whoami` команда с использованием пути и сохранения в переменной, $ output, и распечатайте значение $ output .
$выход= $(/usr/являюсь/кто я)$выбросил $ output
Выход:
Использование аргумента командной строки
Вы можете использовать аргумент командной строки с командой в качестве аргумента при подстановке команды.
Пример # 8:
Создайте файл bash с именем cmdsub3.sh со следующим сценарием. ` базовое имя `команда используется здесь для получения имени файла из 2ndаргумент командной строки и хранится в переменной, $ filename . Мы знаем 1улАргумент командной строки - это имя исполняемого скрипта, которое обозначается символом $ 0.
#! / bin / bashимя файлазнак равно``базовое имя 1 доллар``
выбросил 'Имя файла$ filename. '
Запустите сценарий со следующим значением аргумента.
$трепатьcmdsub3.sh Рабочий стол/темп/hello.txtЗдесь, базовое имя пути, Рабочий стол / temp / hello.txt является ' hello.txt '. Итак, ценность $ filename будет hello.txt .
Выход:
Заключение:
В этом руководстве показаны различные варианты использования подстановок команд. Если вам нужно работать с несколькими командами или зависимыми командами и временно сохранить результат для выполнения некоторых других задач позже, вы можете использовать эту функцию в своем скрипте, чтобы получить результат.
Больше информации в видео: