Скрипты оболочки · 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, чтобы объявить переменную в скриптах оболочки, пользователю не нужно беспокоиться о том, чтобы объявить ее тип данных; интерпретатор автоматически определит тип данных переменной на основе данных, которые пользователь сохраняет в ней во время выполнения.

Правила именования переменных оболочки

Как и в любом языке программирования, существуют правила именования переменных оболочки. Ниже приведены основные правила:

  1. Имена переменных должны начинаться с буквы или подчеркивания.
  2. Они могут содержать только буквенно-цифровые символы или подчеркивания.
  3. Переменные чувствительны к регистру, поэтому переменные 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

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.