Что такое переменные Bash и как их использовать?

Bash позволяет вам сопоставлять целые строки текста с отдельными переменными, упрощая их использование и написание скриптов. Как они работают и как вы можете их использовать? Давайте разберемся.
Содержание
- Что такое переменная Bash?
- Переменные в реальном времени
- Переменные в скриптах
- Постоянные переменные Bash и псевдонимы
- Создание массивов
- Выполнение переменных подшелла
- Манипуляция подстроками
- Часто задаваемые вопросы
Что такое переменная Bash?
Переменные — это легко запоминаемые имена, которые могут содержать различные алфавитно-цифровые значения. Они полезны, так как позволяют применять одну и ту же функцию к различным значениям, не переписывая скрипт/фрагмент кода. Они также упрощают написание скрипта/фрагмента кода, так как вместо работы с отдельными значениями вы можете использовать одно и то же имя для всех из них.
Переменные в реальном времени
Bash позволяет использовать переменные. Вы можете создавать переменные на лету и повторно использовать их в текущей сессии Bash. Они могут помочь вам в использовании Bash различными способами и исчезнут после завершения текущей сессии.
Например, предположим, что вы посещаете множество сайтов. Вы можете проводить исследование или собирать данные и создать следующую переменную:
sitea=https://www.maketecheasier.com
После этого, если вы захотите посетить наш сайт с помощью Firefox, вы можете просто ввести:
firefox $sitea
Гораздо проще — и более читаемо. Переменная $sitea останется сопоставленной с сайтом, пока вы либо не измените ее содержимое вручную, либо сессия Bash не завершится. И, конечно, вы можете создавать больше переменных, таких как siteb, sitec и sited.
При настройке новых переменных вы можете использовать любые имена, которые хотите, и хранить любые алфавитно-цифровые строки внутри них. Однако имейте в виду, что они чувствительны к регистру по умолчанию. Таким образом, $sitea не будет тем же самым, что и $SiteA. Также обратите внимание, что вы должны использовать кавычки, когда храните строки со специальными символами внутри них (включая пробелы).
Совет: для тех, кто нов в Bash, начните с этих базовых команд Bash.
Переменные в скриптах
Переменные в Bash более полезны при написании скриптов, так как они позволяют вам написать один скрипт, который затем может проходить через различные строки или действовать на настроенные фрагменты данных. Предположим, что вы пишете скрипт, который может использовать каждый на своем компьютере, но каждый раз будет отображать персонализированное приветствие. Без переменных вам пришлось бы писать другую версию скрипта для каждого пользователя. С переменными вы сохраняете скрипт неизменным и просто меняете имя пользователя.
Такой скрипт будет выглядеть примерно так:
#!/bin/bash
username=Ramces
echo$username
Приведенный выше пример может показаться избыточным; однако, по мере увеличения сложности кода переменные становятся незаменимыми. Скрипт может содержать сотни или тысячи строк и содержать имя пользователя в разных местах. Чтобы лучше понять это, рассмотрим следующий несколько другой скрипт:
#!/bin/bash
username=Linus
echo Hello $username. This is a simple script I wrote that will repeat your name - that is, $username - often as an actual example of how to use Bash variables. I hope it will make it easier to understand how to use variables to improve your Bash workflow, $username. In this case, the variable username is mapped to your name. Whenever Bash runs into it, it replaces it with $username.
Приведенный выше скрипт будет использовать имя, определенное как переменная username, чтобы завершить текст. Если использовать фактическое имя пользователя, вам придется ввести его четыре раза, затем сделать то же самое для следующего пользователя и еще четыре раза для следующего. Снова и снова. Присвоив его переменной, вам нужно будет изменить его только один раз для каждого пользователя, и каждое упоминание имени пользователя в тексте будет обновлено.
Хорошо знать: кроме переменных, вы также можете использовать цикл for в Bash.
Постоянные переменные Bash и псевдонимы
Мы увидели, как вы можете временно устанавливать переменные и как, для чего-то более постоянного, вы можете включить их в свои собственные скрипты. Вы также можете постоянно устанавливать переменные в Bash, редактируя файл “~/.bashrc”.
- Откройте файл “~/.bashrc” в вашем любимом текстовом редакторе.
nano ~/.bashrc- Мы рекомендуем вам начать с тестового запуска, добавив только одну переменную, чтобы вы знали, куда смотреть, если процесс не сработает. Перейдите в конец файла и в новой строке добавьте вашу переменную.
myname="Ramces Red"
- Сохраните файл и выйдите из редактора. Изменения не будут применены немедленно. Введите следующее в терминале, чтобы они вступили в силу:
source ~/.bashrc- Используйте новую переменную в вашей сессии Bash:
echo$mynameВы можете настроить столько переменных, сколько хотите, и значительно упростить свои повседневные приключения в Bash.
Для дополнительного повышения производительности также стоит настроить другой тип переменной: псевдонимы. В отличие от типичных переменных, которые сопоставлены с данными, которые вы можете использовать в командах, псевдонимы используются вместо фактических команд.
Так же, как вы можете использовать легко запоминаемую переменную для хранения длинных строк текста, вы можете использовать псевдонимы в качестве простых альтернатив сложным командам. Вы можете узнать больше о них здесь, где мы превращаем всю команду сжатия 7zip в двухсимвольный псевдоним.
Наконец, даже если вы навсегда установили переменную в .bashrc, вы можете временно присвоить ей другое значение, как мы видели ранее. Переменная будет представлять новое содержимое до тех пор, пока текущая сессия Bash не завершится (после выхода или перезагрузки) или вы не перезагрузите файл .bashrc.
Создание массивов
Хотя большинство пользователей Bash думают о переменных как о простой связи между фрагментом данных и меткой, также возможно использовать их как маркер для массивов. Это тип структуры данных, который может хранить несколько значений в формате индексированного номера. Чтобы создать массив, выполните следующие шаги:
- Создайте пустой скрипт оболочки:
nano array.sh- Используйте подкоманду
declare, чтобы инициализировать массив Bash в текущем процессе оболочки.
declare-a myarray
- Заполните ваш новый массив, используя встроенный оператор присваивания Bash. Например, следующая строка кода создает массив с пятью элементами внутри:
myarray=([0]=hello [1]=maketecheasier [2]=its [3]=an [4]=array)
- Проверьте, работает ли ваш новый массив, используя команду
echo, чтобы извлечь данные из него:
echo${myarray[1]}
Вы также можете вывести содержимое массива, используя оператор “*”:
echo${myarray[*]}
Выполнение переменных подшелла
Одной из самых больших особенностей Bash является его способность создавать подшеллы, где программы могут выполняться так, как если бы они были базовыми функциями. Например, написание ls -a в скрипте оболочки и его выполнение все равно выведет содержимое текущего рабочего каталога.

Хотя это может показаться ограничивающим, Bash расширяет это, позволяя вам хранить вывод этих программ внутри переменных. Это позволяет вам использовать их в качестве входных данных для других программ внутри вашего скрипта.
- Чтобы использовать переменные подшелла, сначала создайте пустой скрипт оболочки:
nano subshell.sh- Напишите следующий шаблонный код внутри вашего нового скрипта оболочки:
#!/bin/bash
mysubshell=$(x)
echo"The output of the variable is $mysubshell"- Замените “x” на команду, которую вы хотите выполнить и сохранить вывод. Например, следующая команда получит содержимое файла world.txt и заменит слово “world” на “maketecheasier.”
mysubshell=$(sed s/world/maketecheasier/g world.txt)
- Проверьте вашу новую переменную подшелла, запустив ваш новый скрипт:
chmod u+x ./subshell.sh
bash ./subshell.sh
К сведению: кроме переменных, это специальные символы, которые вы должны знать в Bash.
Манипуляция подстроками
Помимо хранения и извлечения данных, вы также можете изменять содержимое переменных. Bash имеет набор операторов, которые вы можете прикрепить в конце каждой переменной, что позволит вам точно настроить ваши скрипты без вызова каких-либо дополнительных программ.
- Создайте пустой скрипт оболочки:
nano substring.sh- Напишите следующий шаблонный код внутри вашего пустого скрипта:
#!/bin/bash
mysubstring=hello.txt.old
echo"My filename is: ${mysubstring}"- Основная манипуляция подстроками бывает в трех формах. Во-первых, символ “#” принимает шаблон regex, который оболочка удалит в начале переменной:
#!/bin/bash
mysubstring=hello.txt.old
echo"My filename is: ${mysubstring#*.}"
- Во-вторых, символ “%” также принимает шаблон regex, который оболочка удалит в конце переменной:
#!/bin/bash
mysubstring=hello.txt.old
echo"My filename is: ${mysubstring%.*}"
- Bash также предоставляет способ выборочной модификации содержимого переменной. Похожим образом на программу
sed, вы можете использовать символ “/” для поиска и замены любой строки внутри переменной:
#!/bin/bash
mysubstring=hello.txt
echo"My filename is: ${mysubstring/hello/maketecheasier}"
Хорошо знать: регулярные выражения — важный инструмент в арсенале каждого пользователя Linux. Узнайте, как эффективно его использовать с помощью нашего простого справочника.
Часто задаваемые вопросы
Можно ли запустить скрипт оболочки внутри переменной?
Да, написав полный путь к скрипту, который вы хотите запустить. Например, выполнение $(/home/ramces/.scripts/sample.sh) создаст подшелл Bash и запустит скрипт “sample.sh” из моего домашнего каталога.
Можно ли удалить переменную во время выполнения скрипта?
Да. Вы можете удалить переменную из работающего процесса оболочки, вставив подкоманду unset, за которой следует имя переменной в вашем скрипте. Важно отметить, что выполнение этой команды не удалит никакие переменные, которые работают вне текущего процесса оболочки.
Можно ли использовать постоянную переменную внутри внешнего скрипта оболочки?
Да. Возможно ссылаться на значение переменной, которая была объявлена вне текущего процесса оболочки. Однако вам также нужно быть осторожным при использовании внешних переменных, так как легко временно перезаписать их.
Кредит изображения: Unsplash. Все изменения и скриншоты сделаны Рамсесом Редом.