Работа с переменными оболочки

ShellBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы научитесь работать с переменными оболочки (shell variables) в среде Linux. Переменные оболочки необходимы для хранения и обработки данных в скриптах. Они могут содержать различные типы значений, такие как числа, символы или строки. Данное руководство поможет вам освоить создание, обращение и использование переменных, закладывая прочный фундамент для написания сценариев командной строки.

Создание переменных оболочки

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

  1. Откройте терминал в вашей WebIDE (VS Code).

  2. Создайте новый файл с именем variables.sh в директории /home/labex/project:

    touch /home/labex/project/variables.sh
  3. Откройте файл 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: строковая переменная, содержащая несколько пробелов подряд.
  4. Сохраните файл.

  5. Сделайте скрипт исполняемым:

    chmod +x /home/labex/project/variables.sh
  6. Запустите скрипт:

    ./variables.sh

    Вы должны увидеть следующий вывод:

    Price per apple: 5
    My first letters: ABC
    Greeting: Hello        world!

    Обратите внимание, что лишние пробелы в переменной greeting сохраняются при выводе, так как при определении переменной использовались одинарные кавычки, а в команде echo переменная указана без кавычек (в данном конкретном контексте Bash сохранил структуру строки).

Обращение к переменным оболочки

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

  1. Откройте файл variables.sh в WebIDE.

  2. Замените содержимое файла следующим кодом:

    #!/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"
  3. Сохраните файл.

  4. Запустите скрипт:

    ./variables.sh

    Вы должны увидеть следующий вывод:

    The price of an Apple today is: $HK 5
    The first 10 letters in the alphabet are: ABCDEFGHIJ
    Hello world!
    Hello        world!

    Обратите внимание на различия:

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

Подстановка команд

Подстановка команд позволяет использовать результат выполнения команды в качестве значения переменной. Это делается путем заключения команды в $() или в обратные кавычки (``).

  1. Откройте файл variables.sh в WebIDE.

  2. Добавьте следующий код в конец файла:

    ## 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"
  3. Сохраните файл.

  4. Запустите скрипт:

    ./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 предоставляет синтаксис $((выражение)) для выполнения математических операций.

  1. Создайте новый файл с именем arithmetic.sh в директории /home/labex/project:

    touch /home/labex/project/arithmetic.sh
  2. Откройте файл 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"
  3. Сохраните файл.

  4. Сделайте скрипт исполняемым:

    chmod +x /home/labex/project/arithmetic.sh
  5. Запустите скрипт:

    ./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

    Этот скрипт демонстрирует основные арифметические операции с использованием переменных.

Использование переменных окружения

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

  1. Создайте новый файл с именем environment.sh в директории /home/labex/project:

    touch /home/labex/project/environment.sh
  2. Откройте файл 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"
  3. Сохраните файл.

  4. Сделайте скрипт исполняемым:

    chmod +x /home/labex/project/environment.sh
  5. Запустите скрипт:

    ./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, помните, что переменные — это мощный инструмент для хранения и обработки данных. Практикуйтесь в их использовании, чтобы сделать ваши скрипты более гибкими и универсальными.