Скрипты оболочки · 6 min read · Nov 14, 2025
Скрипты оболочки Часть 2: Принятие входных данных и выполнение арифметики оболочки
Привет! Эта статья является второй частью серии учебников по скриптам оболочки на Howtoforge. К этому времени я предполагаю, что вы прочитали первую часть серии и знаете, как создать простой скрипт и выполнить его. В этой части вы узнаете, как принимать входные данные от пользователя и обрабатывать их с помощью скриптов оболочки. Давайте начнем!
Переменные в Linux
Так же, как и языки программирования, оболочка Linux имеет возможность хранения данных в переменных. Переменная — это контейнер, который временно хранит данные, которые будут обрабатываться с помощью языка программирования. В Linux есть два типа переменных: переменные окружения и переменные оболочки.
Переменные окружения
Переменные окружения — это переменные по умолчанию в Linux и используются для передачи информации между процессами в оболочке. Переменные окружения чувствительны к регистру и всегда должны быть написаны заглавными буквами для доступа к ним.
Таблица ниже показывает общие переменные окружения в оболочке Linux:
| Имя переменной | Использование |
| BASH | Содержит полный путь к интерпретатору команд для скриптов Bash |
| BASH_VERSION | Содержит версию релиза bash на используемой машине |
| HOME | Содержит относительный путь к домашнему каталогу. |
| LOGNAME | Содержит имя учетной записи текущего пользователя, вошедшего в систему |
| OSTYPE | Содержит строку, описывающую текущую ОС используемой машины |
| PATH | Содержит абсолютный путь к исполняемым файлам в Linux, разделенный двоеточием |
| PWD | Содержит текущий рабочий каталог оболочки |
| SHELL | Содержит предпочитаемую оболочку командной строки |
| USER | Работает аналогично LOGNAME. Содержит имя учетной записи текущего пользователя, вошедшего в систему |
| _ | Содержит имя недавно использованной команды в оболочке |
Чтобы отобразить значение переменной окружения, пользователь должен добавить знак доллара ($) перед переменной, к которой нужно получить доступ. Например, чтобы отобразить некоторую системную информацию, такую как текущий рабочий каталог, вошедший в систему пользователь и тип ОС, используя echo, мы используем:
#!/bin/bash
echo $PWD
echo $LOGNAME
echo $OSTYPEРезультат:

Чтобы получить полный список переменных окружения в Linux, используйте команду env.
Изменение значений переменных окружения
Чтобы обеспечить гибкость системы, эти переменные окружения можно изменять. Чтобы установить значение переменной окружения, используйте выражение присваивания (знак равенства).
Пример:
#!/bin/bash
echo $USER
USER="новый пользователь"
echo $USERРезультат скрипта:

Когда вы запускаете скрипт, сначала $USER в строке echo $USER показывает значение переменной USER. Используя оператор присваивания (=), переменная USER изменяет свое значение. Однако, если пользователь присвоит неизвестные значения переменной окружения, оболочка создаст другую переменную оболочки, аналогичную переменной окружения в локальном контексте скрипта, но это не повлияет на поведение других приложений. Это означает, что как только наш скрипт будет закрыт, переменная USER сохранит свое значение по умолчанию.
Обратите внимание, что в нашем предыдущем примере мы опускаем знак доллара ($) в имени переменной при изменении значений переменных окружения, таких как строка USER=”новый пользователь”. Также, при использовании оператора присваивания, между USER и знаком равенства не должно быть пробела. Добавление пробела между ними создает ошибку.
Переменные оболочки
Оболочка также позволяет пользователю объявлять переменные. Так же, как и в PHP, чтобы объявить переменную в скриптах оболочки, пользователю не нужно беспокоиться о том, чтобы объявить ее тип данных; интерпретатор автоматически определит тип данных переменной на основе данных, которые пользователь сохраняет в ней во время выполнения.
Правила именования переменных оболочки
Как и в любом языке программирования, существуют правила именования переменных оболочки. Ниже приведены основные правила:
- Имена переменных должны начинаться с буквы или подчеркивания.
- Они могут содержать только буквенно-цифровые символы или подчеркивания.
- Переменные чувствительны к регистру, поэтому переменные path, PATH и Path различны.
Чтобы доказать это правило, мы создадим простой скрипт ниже:
#!/bin/bash
12abc=10
abc#*=10
_abc=10
_ABC=2
echo $12abc $abc#* $_abc $_ABCСтроки 2 и 3 возвращают ошибку “команда не найдена”, потому что переменная 12abc начинается с числового символа, а переменная abc#* содержит недопустимые символы. Мы также доказали, что _abc и _ABC — это разные переменные, и строка _ABC=2 не переопределяет значение _abc.

Присвоение значений переменным оболочки с помощью команды read:
read — это команда, которая позволяет принимать входные данные от пользователя. Синтаксис использования команды read:
read <имя_переменной>Например, мы создадим скрипт, который позволит пользователю ввести свое имя и фамилию и отобразить их. Чтобы дать пользователю знать, что делать, мы показываем приглашение пользователю с помощью команды echo.
#!/bin/bash
echo "Ваше имя: "
read fname
echo "Ваша фамилия:"
read lname
echo "Здравствуйте $fname $lname ! Я учусь создавать скрипты оболочки."Результат:

Обратите внимание, что, как и в нашем предыдущем примере, нам не нужно объявлять переменную, чтобы использовать ее. Интерпретатор также автоматически создает переменную, которая используется в команде read. Однако в примере мы многократно использовали команду echo, чтобы создать приглашение для пользователя. Команда read также имеет возможность создания приглашения во время принятия входных данных от пользователя. Синтаксис использования приглашения в команде read:
read -p "Ваше приглашение: " <имя_переменной>Чтобы упростить наш предыдущий код, мы можем реконструировать код следующим образом:
#!/bin/bash
read -p "Ваше имя: " fname
read -p "Ваша фамилия: " lname
echo "Здравствуйте $fname $lname ! Я учусь создавать скрипты оболочки."Еще одно преимущество команды read заключается в том, что приглашение командной строки находится сразу после текста, а не на следующей строке.

Команда read также может использоваться для принятия паролей. В отличие от обычных входных данных, пароли скрыты для обеспечения безопасности. Синтаксис для принятия пароля:
read -s -p "ваше приглашение" <имя_переменной>Выполнение простых арифметических операций с помощью оболочки
Помимо принятия входных данных и отображения вывода, оболочка bash также имеет встроенный арифметический вариант. Таблица ниже обобщает встроенные арифметические операторы оболочки Bash.
| Оператор | Описание | Синтаксис | Использование |
| + | Сложение | a=$((b+c)) | Складывает значения b и c и сохраняет их в переменной a |
| - | Вычитание | a=$((b-c)) | Вычитает значение c из b и сохраняет его в переменной a |
| * | Умножение | a=$((b*c)) | Умножает значения b и c и сохраняет их в переменной a |
| / | Деление | a=$((b/c)) | Делит значение b на c и сохраняет его в переменной a |
| % | Остаток | a=$((b%c)) | Выполняет деление по модулю b и c и сохраняет его в переменной a |
| ++ | Предварительное увеличение | $((++aa)) | Увеличивает значение переменной a немедленно |
| ++ | Постфиксное увеличение | $((a++)) | Увеличивает значение переменной a и отражает изменения на следующей строке |
| – | Предварительное уменьшение | $((–a)) | Уменьшает значение переменной a немедленно |
| – | Постфиксное уменьшение | $((a–)) | Уменьшает значение переменной a и отражает изменения на следующей строке |
| Возведение в степень | $((a2)) | Возводит значение a в степень 2 | |
| += | Плюс равно | $((a+=b)) | Складывает значения a и b и сохраняет их в переменной a |
| -= | Минус равно | $((a-=b)) | Вычитает значение b из a и сохраняет его в переменной a |
| *= | Умножить равно | $((a*=b)) | Умножает значения a и b и сохраняет их в переменной a |
| /= | Делить равно | $((a/=b)) | Делит значение a на b и сохраняет его в переменной a |
| %= | Мод-равно | $((a%=b)) | Выполняет деление по модулю между a и b и сохраняет его в переменной a |
Обратите внимание, что каждый раз, когда вы выполняете арифметическую инструкцию, все наши переменные будут заключены в знак доллара и двойные скобки. Делая это, интерпретатор рассматривает значения наших переменных как целые числа. Без этого интерпретатор рассматривает значения переменной как строки. Чтобы увидеть пример, смотрите скрипт ниже:
#!/bin/bash
read -p "Введите int1: " a
read -p "Введите int2: " b
echo $((a+b))
c=$a+$b
echo $cКогда мы запускаем наш пример, строка $((a+b)) складывает значения пользователя, которые хранятся в переменных a и b соответственно, в то время как c=$a+$b рассматривает переменные a и b как строки.

Заключение
Мы рассмотрели, как принимать входные данные и сохранять их в переменной, а также как выполнять арифметические операции в скриптах оболочки bash. В следующей части мы рассмотрим управляющие структуры и, в частности, структуру принятия решений.
Ссылки:
Проект информации о Linux. (2007). Получено 29 апреля 2015 года с Linfo.org: http://www.linfo.org/
Купер, М. (н.д.). Руководство по продвинутому скриптингу Bash. Получено 29 апреля 2015 года с http://www.tldp.org/LDP/abs/html/
Переменные окружения. (н.д.). Получено 29 апреля 2015 года с документации Ubuntu: https://help.ubuntu.com/community/EnvironmentVariables
Get new posts in your inbox
No spam. Unsubscribe anytime.