Переменные в сценариях Bash. Каковы особенности их использования?

переменные в сценариях bash. каковы особенности их использования?

Работа со сценарными переменными

Тема данного урока частично разбиралась ранее. В статье «использование переменных» были рассмотрены базовые принципы их работы в окне терминала. Также мы внесли пояснения к особенностям переменных оболочки и окружения. Внутри Bash-скрипта переменные используются аналогичными способами, так как его синтаксис — это всего лишь набор последовательных команд терминала. Однако есть несколько отличительных черт.

При запуске обычной программы через терминал Linux командный интерпретатор создает отдельный процесс, который имеет уникальный идентификатор, зарегистрированный в операционной системе. Такой идентификатор имеет каждая программа, независимо от того работает она в терминале или запускается в фоновом режиме со стартом системы. Его принято называть PID-номером или просто PID.

Скрипты выполняются другим способом. В терминале уже работает один экземпляр командного интерпретатора Bash. Он отвечает за разбор и выполнение команд, вводимых пользователем, а также имеет доступ к переменным окружения и оболочки. Для выполнения скрипта запускается отдельный экземпляр Bash – подпроцессор.

Скрипт, выполняемый внутри подпроцессора, должен иметь доступ к переменным окружения. Поэтому основная оболочка инициализирует его, передавая свои глобальные переменные. Нужно учитывать, что переменные окружения подпроцессора и основного экземпляра Bash, работающего в терминале, не связаны между собой. Подпроцессор может менять значения глобальных переменных, но эти изменения не затронут аналогичные переменные, существующие в других подпроцессорах

Linux всё же имеет механизмы запуска подпроцессов в окружении основного командного интерпретатора Bash. Для этого перед именем вызываемого скрипта нужно поставить точку и пробел. Скрипт, запущенный таким образом сможет изменять настоящие переменные окружения.

Пример кода скрипта (change-env)

#!/bin/bash
#cохраните скрипт в папке ~/.local/bin

MYVALUE=$MYVALUE" - привет из скрипта!"
echo $MYVALUE

Запуск на выполнение

#назначаем переменную окружения и вызываем скрипт
export MYVALUE="я говорю"
change-env
я говорю - привет из скрипта!

#после выполнения скрипта переменная не изменилась
echo $MYVALUE
я говорю

#вызываем скрипт с точкой и смотрим переменную
. change-env
я говорю - привет из скрипта!
echo $MYVALUE
я говорю - привет из скрипта!

Переменные, создаваемые оболочкой

Перед запуском нового процесса или во время выполнения текущего, командный интерпретатор Bash создает ряд переменных, которые доступны только для чтения. Их значения невозможно переопределить, так как они имеют административную направленность.

Список автоматически создаваемых переменных:

Переменная Значение
$? Значение, возвращенное последней выполненной командой
$! Идентификатор PID последнего запущенного фонового процесса
$$ Идентификатор PID текущего выполняемого процесса
$0 Имя файла выполняемого скрипта или оболочки
$# Количество переданных параметров
От $1 до $9 Значения переданных параметров от первого до девятого
$* Совокупность всех переданных параметров

Пример кода скрипта (script-info)

#!/bin/bash
#cохраните скрипт в папке ~/.local/bin

echo "PID текущего скрипта: $$"
echo "Расположение скрипта: $0"
echo "Всего параметров: $#"
echo "Значения параметров: $*"

Запуск на выполнение

script-info 'первый параметр' 'второй параметр'
PID текущего скрипта: 24428
Расположение скрипта: /home/user/.local/bin/script-info
Всего параметров: 2
Значения параметров: первый параметр второй параметр

Последние публикации