Иногда требуется запустить одну или несколько команд или сценариев в фоновом режиме. Эту задачу можно выполнить, записав все команды или сценарии в файл сценария и выполнив файл с помощью амперсанда (&) или выполнив команды или сценарии в подоболочке из текущей оболочки. Подоболочку можно использовать для выполнения нескольких команд или сценариев, заключая их в $() или обратные кавычки (`). В этой статье показаны методы использования подоболочки Bash.
Различные примеры подоболочки
В этой части статьи показаны различные способы выполнения скрипта в подоболочке.
Пример 1. Выполнение подоболочки с использованием одинарных и двойных кавычек
Создайте файл Bash со следующим сценарием, который печатает текущую дату и время. Затем выводится переменная $strVal, заключая сценарий подоболочки в одинарные и двойные кавычки.
#!/bin/bash #Вывести команду `date` в подоболочке echo "Сегодня `date`" #Определить строковую переменную strVal="Bash Subshell" #Вывести переменную в подоболочке, используя одинарные кавычки echo "Вывод команды одинарные кавычки:" '$(echo $strVal)' #Напечатать переменную в подоболочке, используя двойные кавычки echo "Вывод двойных кавычек:" "$(echo $strVal)"
Следующий вывод появляется после выполнения скрипта. Сценарий подоболочки печатается в виде строки, когда он заключен в одинарные кавычки. Сценарий подоболочки выполняется, когда он заключен в двойные кавычки:
andreyex@andreyex: $ bash subshell1.bash Сегодня Mon May 15 11:42:21 +06 2023 Вывод одинарных кавычек: $(echo $strVal) Вывод двойных кавычек: Bash Subshell andreyex@andreyex:-$
Пример 2. Поиск всех файлов определенного расширения с помощью подоболочки
Создайте файл Bash со следующим сценарием, который принимает расширение файла в качестве входных данных от пользователя. Затем в подоболочке выполняется команда ls для поиска всех файлов с этим конкретным расширением.
#!/bin/bash echo -n "Введите имя расширения файла:" #Взять имя расширения файла, по которому будет производиться поиск read ext #Проверить введенное значение if [[ $ext == "" ]]; then #Распечатать сообщение об ошибке echo "Расширение не задано." else echo "Имена файлов с расширением $ext :" #Распечатать все имена файлов с данным расширением echo "$( echo `ls *.$ext` )" fi
Следующий вывод появляется после выполнения скрипта с вводом «txt». Согласно выводу, в текущем местоположении существуют три текстовых файла:
andreyex@andreyex:~$ bash subshell2.bash Введите имя расширения файла:txt Имена файлов с расширением txt: courses.txt employees.txt sales.txt andreyex@andreyex: ~$
Следующий вывод появляется после выполнения скрипта с пустым значением:
andreyex@andreyex: $ bash subshell2.bash Введите имя расширения файла: Расширение не задано. andreyex@andreyex: -$
Пример 3: выполнение арифметического выражения в подоболочке
Создайте файл Bash со следующим сценарием, в котором переменная с тем же именем используется в основной оболочке и подоболочке. Арифметическая операция определена в основной оболочке и подоболочке.
#!/bin/bash #Определить переменную родительской оболочки number=10 #Вывести результат на основе переменной родительской оболочки ((result=$number+5)) echo "Сумма $number+5=$result" #Создать переменную подоболочки с тем же именем, что и у родительской оболочки ( number=20 ; ((result=$number+10)); echo "Сумма $number+5=$result" ) #Снова вывести результат на основе переменной родительской оболочки echo "Сумма $number+5=$result"
Следующий вывод появляется после выполнения скрипта. Первый и последний выходные данные показывают результат основной оболочки. Второй вывод показывает результат подоболочки. Переменная основной оболочки не изменяется переменной подоболочки:
andreyex@andreyex:-$ bash subshell3.bash Сумма 10+5=15 Сумма 20+5=30 Сумма 10+5-15 andreyex@andreyex:-$
Пример 4: выполнение нескольких команд в подоболочке
Создайте файл Bash со следующим сценарием, который отправляет выходные данные команды echo в команду sed, которая заменяет соответствующее строковое значение другой строкой. Вывод команды «echo» — «JavaScript». Итак, это значение сравнивается с «Java» и «JavaScript». Если совпадение найдено, совпадающие строки заменяются строкой «Type».
#!/bin/bash #Определить строковое значение strVal="JavaScript" #Вывести исходное строковое значение echo "Строковое значение: $strVal" #Вывести значение подоболочки echo -n "Значение подоболочки: " echo "$(echo $strVal | sed 's|Java|JavaScript Type|')"
Следующий вывод появляется после выполнения скрипта. В соответствии с выводом строка «Java» заменяется строкой «Type». Вывод подоболочки — «JavaScript TypeScript»:
andreyex@andreyex:-$ bash subshell4.bash Строковое значение: JavaScript Значение подоболочки: JavaScript TypeScript andreyex@andreyex: - $
Заключение
Одна или несколько команд или сценариев могут быть выполнены с использованием подоболочки, не затрагивая основную оболочку. Цели использования подоболочки объясняются в этой статье с использованием нескольких примеров. Различные типы задач, такие как поиск файлов, вычисление суммы чисел, замена строк и т. д., выполняются подоболочкой в приведенных примерах. Концепция использования подоболочки правильно продемонстрирована, и новые пользователи Bash теперь смогут использовать подоболочку после прочтения этой статьи.