Понимание переменных в оболочке Bash необходимо для профессиональной работы с Linux. Это одно из ключевых требований для программирования, а также для достижения уровня 1 сертификации профессионального института Linux (LPIC).
В этой статье мы объясним, как объявлять переменные в Bash таким образом, чтобы вы могли использовать их в других средах в вашей системе Linux, и какие соответствующие побочные эффекты вы должны учитывать.
Оболочка Bash была впервые выпущена в 1989 году и использовалась в качестве оболочки входа по умолчанию для большинства дистрибутивов Linux. Брайан Фокс написал Bash как оболочку UNIX и командный язык для проекта GNU в качестве бесплатной замены оболочки Bourne. Это аббревиатура от Bourne Again Shell. Bash в значительной степени совместим с sh и включает в себя полезные функции из оболочки Korn ksh и оболочки C csh.
В то время как операционная система GNU предоставляет другие оболочки, включая версию csh, Bash является интерактивной оболочкой по умолчанию. Он разработан с учетом переносимости и в настоящее время работает почти во всех версиях UNIX и других операционных системах.
Переменные — важные компоненты языков программирования. На них ссылаются и ими манипулируют в компьютерной программе. Проще говоря, переменные представляют собой именованные ячейки памяти. В Bash это то же самое, что и в любом языке программирования. Это позволяет нам, людям и пользователям компьютера, сохранять значения в «мозгу» компьютера и снова находить их по присвоенному имени переменной.
Термин «переменная» относится к комбинированной форме двух слов, т. е. «Варьировать + способно», что означает, что ее значение можно изменять и использовать многократно. В отличие от этого переменные, которые нельзя изменить, называются константами.
Пока для вашего сценария достаточно памяти, вы можете свободно создавать и использовать переменные. Вы можете просто установить их, указав имя переменной, а затем присвоив ей значение. Имя переменной в Bash может включать буквы, цифры и символы подчеркивания. Его имя может начинаться только с буквы и символа подчеркивания. Допустимые имена переменных: size, tax5 и _tax20, но не 5rules.
Значение переменной в Bash может содержать число, один символ, строку символов или список элементов (называемый массивом). У него нет видимого типа данных, и внутренний тип данных переменной будет автоматически вычисляться (или производиться) после присвоения значения. Кроме того, нет необходимости объявлять переменную — присвоение значения ее ссылке автоматически создаст переменную. В приведенном ниже примере сценария Bash это демонстрируется для присвоения строки и присвоения числового номера.
#! /bin/bash welcomeMessage="Привет мир!" echo $welcomeMessage price=145 echo $price
Нет фиксированных правил написания имен переменных, только условные обозначения. Используются следующие условные обозначения:
Для глобальных ИТ-компаний принято работать с руководствами по стилю, чтобы обеспечить единый стиль программирования в компании.
По умолчанию переменная локально привязана к структуре, функции, сценарию или процессу и не может быть доступна извне. Пример ниже показывает это для переменной $message, принадлежащей сценарию, и $welcome, принадлежащей функции outputWelcomeMessage().
#!/bin/bash # определите сообщение переменной для скрипта message=”Привет, еще раз!” outputWelcomeMessage() { # определение локальной переменной welcome=”Привет!” echo $welcome } outputWelcomeMessage() # напечатать Привет! echo $message # напечатать Привет, еще раз!
Чтобы убедиться, что ранее определенная переменная с тем же именем привязана локально, используйте ключевое слово local, как показано ниже. Без ключевого слова local присвоение в строке 8 относилось бы к глобальной переменной с тем же именем, определенным ранее.
#!/bin/bash # определите сообщение переменной для скрипта message=”Привет, еще раз!” outputWelcomeMessage () { # определение локальной переменной с тем же именем Local message=”Привет!” echo $message } outputWelcomeMessage () # напечатать Привет! echo $message # напечатать Привет, еще раз!
Чтобы сделать внутреннюю переменную видимой для других дочерних процессов, необходим дополнительный шаг. Этот шаг называется экспортом переменной. Bash предлагает использование ключевого слова export, за которым следует имя переменной. В листинге ниже это показано для переменной backupPath.
$ backupPath=”/opt/backup/” $ export backupPath
Команда экспорта — это встроенная оболочка, которая используется для определения переменной как той, которую наследуют подоболочки (оболочки, порожденные из оригинала). Таким образом, экспортируемые переменные могут быть прочитаны и записаны более чем одним процессом.
Второй вариант — объявить переменную как переменную среды с самого начала. Вы можете сделать это, используя ключевое слово declare, за которым следует параметр «-x». Эффект аналогичен введенной ранее команде экспорта.
$ declare -x BACKUPPATH=”/opt/backup/”
Когда вы выполняете программу, она автоматически наследует свои переменные среды от родительского процесса. Например, если $HOME установлен в /root в родительском элементе, тогда дочерняя переменная $HOME также будет установлена в /root.
Среди прочего, в Linux есть полезные команды и параметры, относящиеся к переменным. Первые два называются env и printenv. В них перечислены все переменные среды.
На изображении ниже показан вывод команды env в терминале, запущенном в X-сеансе. Он содержит такие переменные, как $XTERM (тип терминала), $SHELL (программа, которая вызывается при входе в систему и показывает /bin/bash для пути к интерпретатору Bash), $LS_COLORS (цвета, которые используются для выделения различных файлов. типы при вызове ls) и $DESKTOP_SESSION (текущая среда рабочего стола X).
Третий и четвертый — это опции команды экспорта — -p и -n. -p — это сокращение от print и просто отображает все экспортированные переменные в текущей оболочке с помощью команды объявления.
$ export -p declare -x DESKTOP_SESSION="xfce" declare -x DISPLAY=":0" declare -x GLADE_CATALOG_PATH=":" declare -x GLADE_MODULE_PATH=":" declare -x GLADE_PIXMAP_PATH=":" declare -x HOME="/home/frank" declare -x LANG="de_DE.UTF-8"
Параметр -n используется для отключения переменной среды. Приведенный ниже листинг демонстрирует это для ранее определенной переменной BACKUPPATH.
$ export -n BACKUPPATH
Bash — очень умная, но иногда и немного сложная среда. Переменные контролируют взаимодействие различных инструментов. Экспорт переменных помогает взаимодействовать между процессами и прост в использовании в повседневной жизни.