ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Подоболочки Bash

Bash Heredoc

Иногда требуется запустить одну или несколько команд или сценариев в фоновом режиме. Эту задачу можно выполнить, записав все команды или сценарии в файл сценария и выполнив файл с помощью амперсанда (&) или выполнив команды или сценарии в подоболочке из текущей оболочки. Подоболочку можно использовать для выполнения нескольких команд или сценариев, заключая их в $() или обратные кавычки (`). В этой статье показаны методы использования подоболочки 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 теперь смогут использовать подоболочку после прочтения этой статьи.

Exit mobile version