Введение
В этой лабораторной работе вы научитесь работать с переменными оболочки (shell variables) в среде Linux. Переменные оболочки необходимы для хранения и обработки данных в скриптах. Они могут содержать различные типы значений, такие как числа, символы или строки. Данное руководство поможет вам освоить создание, обращение и использование переменных, закладывая прочный фундамент для написания сценариев командной строки.
Создание переменных оболочки
Переменные оболочки создаются путем присваивания им значения с помощью знака =. Начнем с создания простого скрипта, в котором определим несколько переменных.
Откройте терминал в вашей WebIDE (VS Code).
Создайте новый файл с именем
variables.shв директории/home/labex/project:touch /home/labex/project/variables.shОткройте файл
variables.shв WebIDE и добавьте в него следующее содержимое:#!/bin/bash PRICE_PER_APPLE=5 MyFirstLetters=ABC greeting='Hello world!' echo "Price per apple: $PRICE_PER_APPLE" echo "My first letters: $MyFirstLetters" echo "Greeting: $greeting"В этом скрипте мы создали три переменные:
PRICE_PER_APPLE: целочисленная переменная.MyFirstLetters: строковая переменная.greeting: строковая переменная, содержащая несколько пробелов подряд.
Сохраните файл.
Сделайте скрипт исполняемым:
chmod +x /home/labex/project/variables.shЗапустите скрипт:
./variables.shВы должны увидеть следующий вывод:
Price per apple: 5 My first letters: ABC Greeting: Hello world!Обратите внимание, что лишние пробелы в переменной
greetingсохраняются при выводе, так как при определении переменной использовались одинарные кавычки, а в команде echo переменная указана без кавычек (в данном конкретном контексте Bash сохранил структуру строки).
Обращение к переменным оболочки
При обращении к переменным существуют ситуации, когда необходимо использовать специальный синтаксис. Давайте разберем эти случаи.
Откройте файл
variables.shв WebIDE.Замените содержимое файла следующим кодом:
#!/bin/bash PRICE_PER_APPLE=5 MyFirstLetters=ABC greeting='Hello world!' ## Экранирование специальных символов echo "The price of an Apple today is: \$HK $PRICE_PER_APPLE" ## Избежание двусмысленности echo "The first 10 letters in the alphabet are: ${MyFirstLetters}DEFGHIJ" ## Сохранение пробельных символов echo $greeting echo "$greeting"Сохраните файл.
Запустите скрипт:
./variables.shВы должны увидеть следующий вывод:
The price of an Apple today is: $HK 5 The first 10 letters in the alphabet are: ABCDEFGHIJ Hello world! Hello world!Обратите внимание на различия:
- Символ
$экранирован обратным слэшем в первой строке, чтобы он напечатался как обычный текст. - Фигурные скобки
{}используются во второй строке, чтобы четко обозначить границы имени переменной. - Последние две строки демонстрируют разницу между использованием кавычек и их отсутствием при обращении к переменной, содержащей пробелы.
- Символ
Подстановка команд
Подстановка команд позволяет использовать результат выполнения команды в качестве значения переменной. Это делается путем заключения команды в $() или в обратные кавычки (``).
Откройте файл
variables.shв WebIDE.Добавьте следующий код в конец файла:
## Command substitution CURRENT_DATE=$(date +"%Y-%m-%d") echo "Today's date is: $CURRENT_DATE" FILES_IN_DIR=$(ls) echo "Files in the current directory:" echo "$FILES_IN_DIR" UPTIME=$(uptime -p) echo "System uptime: $UPTIME"Сохраните файл.
Запустите скрипт:
./variables.shВы увидите вывод, похожий на этот (конкретные значения будут зависеть от вашей системы):
Today's date is: 2023-08-16 Files in the current directory: variables.sh System uptime: up 2 hours, 15 minutesВ этом примере:
$(date +"%Y-%m-%d")запускает командуdateи перехватывает её вывод.$(ls)запускает командуlsи сохраняет список файлов.$(uptime -p)запускает командуuptimeс опцией-pдля получения времени работы системы в удобном формате.
Арифметические операции
Переменные оболочки также могут использоваться в арифметических вычислениях. Bash предоставляет синтаксис $((выражение)) для выполнения математических операций.
Создайте новый файл с именем
arithmetic.shв директории/home/labex/project:touch /home/labex/project/arithmetic.shОткройте файл
arithmetic.shв WebIDE и добавьте следующее содержимое:#!/bin/bash X=10 Y=5 ## Сложение SUM=$((X + Y)) echo "Sum of $X and $Y is: $SUM" ## Вычитание DIFF=$((X - Y)) echo "Difference between $X and $Y is: $DIFF" ## Умножение PRODUCT=$((X * Y)) echo "Product of $X and $Y is: $PRODUCT" ## Деление QUOTIENT=$((X / Y)) echo "Quotient of $X divided by $Y is: $QUOTIENT" ## Остаток от деления (модуль) REMAINDER=$((X % Y)) echo "Remainder of $X divided by $Y is: $REMAINDER" ## Инкремент (увеличение на 1) X=$((X + 1)) echo "After incrementing, X is now: $X" ## Декремент (уменьшение на 1) Y=$((Y - 1)) echo "After decrementing, Y is now: $Y"Сохраните файл.
Сделайте скрипт исполняемым:
chmod +x /home/labex/project/arithmetic.shЗапустите скрипт:
./arithmetic.shВы должны увидеть следующий вывод:
Sum of 10 and 5 is: 15 Difference between 10 and 5 is: 5 Product of 10 and 5 is: 50 Quotient of 10 divided by 5 is: 2 Remainder of 10 divided by 5 is: 0 After incrementing, X is now: 11 After decrementing, Y is now: 4Этот скрипт демонстрирует основные арифметические операции с использованием переменных.
Использование переменных окружения
Переменные окружения — это особый тип переменных, которые доступны всем процессам, запущенным в текущей сессии оболочки. Давайте изучим некоторые стандартные переменные окружения и научимся создавать свои собственные.
Создайте новый файл с именем
environment.shв директории/home/labex/project:touch /home/labex/project/environment.shОткройте файл
environment.shв WebIDE и добавьте следующее содержимое:#!/bin/bash ## Отображение некоторых стандартных переменных окружения echo "Home directory: $HOME" echo "Current user: $LOGNAME" echo "Shell being used: $SHELL" echo "Current PATH: $PATH" ## Создание новой переменной окружения export MY_VARIABLE="Hello from my variable" ## Отображение новой переменной echo "My new variable: $MY_VARIABLE" ## Создание дочернего процесса для демонстрации области видимости bash -c 'echo "MY_VARIABLE in child process: $MY_VARIABLE"' ## Удаление переменной окружения unset MY_VARIABLE ## Проверка удаления переменной echo "MY_VARIABLE after unsetting: $MY_VARIABLE"Сохраните файл.
Сделайте скрипт исполняемым:
chmod +x /home/labex/project/environment.shЗапустите скрипт:
./environment.shВы увидите вывод, аналогичный этому:
Home directory: /home/labex Current user: labex Shell being used: /bin/zsh Current PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin My new variable: Hello from my variable MY_VARIABLE in child process: Hello from my variable MY_VARIABLE after unsetting:Этот скрипт показывает, как обращаться к существующим переменным окружения, как экспортировать новые переменные для дочерних процессов и как их удалять.
Резюме
В ходе этой лабораторной работы вы научились работать с переменными оболочки в Linux. Вы изучили создание переменных и способы обращения к ним, использование подстановки команд для присвоения результатов выполнения команд переменным, выполнение арифметических операций и работу с переменными окружения. Эти навыки являются фундаментом для написания скриптов и будут крайне полезны при администрировании систем Linux.
Основные выводы этой работы:
- Создание и обращение к переменным оболочки.
- Использование специального синтаксиса для ссылок на переменные в различных сценариях.
- Применение подстановки команд для захвата вывода программ.
- Выполнение математических вычислений внутри скриптов.
- Управление переменными окружения и понимание их области видимости.
Продолжая изучение Linux и Bash, помните, что переменные — это мощный инструмент для хранения и обработки данных. Практикуйтесь в их использовании, чтобы сделать ваши скрипты более гибкими и универсальными.



