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

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

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

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

  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.

Ссылка на переменные оболочки (Shell Variables)

При ссылке на переменные оболочки (shell variables) есть несколько сценариев, когда нужно использовать специальный синтаксис. Исследуем эти случаи.

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

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

    #!/bin/bash
    
    PRICE_PER_APPLE=5
    MyFirstLetters=ABC
    greeting='Hello        world!'
    
    ## Escaping special characters
    echo "The price of an Apple today is: \$HK $PRICE_PER_APPLE"
    
    ## Avoiding ambiguity
    echo "The first 10 letters in the alphabet are: ${MyFirstLetters}DEFGHIJ"
    
    ## Preserving whitespace
    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!

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

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

Замена команды (Command Substitution)

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

  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 и сохраняет ее вывод.

Арифметические операции

Переменные оболочки (shell variables) также могут использоваться в арифметических операциях. Bash предоставляет синтаксис $((expression)) для выполнения арифметических действий.

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

    touch /home/labex/project/arithmetic.sh
  2. Откройте файл arithmetic.sh в WebIDE и добавьте следующее содержимое:

    #!/bin/bash
    
    X=10
    Y=5
    
    ## Addition
    SUM=$((X + Y))
    echo "Sum of $X and $Y is: $SUM"
    
    ## Subtraction
    DIFF=$((X - Y))
    echo "Difference between $X and $Y is: $DIFF"
    
    ## Multiplication
    PRODUCT=$((X * Y))
    echo "Product of $X and $Y is: $PRODUCT"
    
    ## Division
    QUOTIENT=$((X / Y))
    echo "Quotient of $X divided by $Y is: $QUOTIENT"
    
    ## Modulus (remainder)
    REMAINDER=$((X % Y))
    echo "Remainder of $X divided by $Y is: $REMAINDER"
    
    ## Increment
    X=$((X + 1))
    echo "After incrementing, X is now: $X"
    
    ## Decrement
    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

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

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

Переменные окружения (environment variables) - это тип переменных, доступных для всех процессов, запущенных в текущей сессии оболочки. Исследуем некоторые общие переменные окружения и узнаем, как создать свои собственные.

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

    touch /home/labex/project/environment.sh
  2. Откройте файл environment.sh в WebIDE и добавьте следующее содержимое:

    #!/bin/bash
    
    ## Displaying some common environment variables
    echo "Home directory: $HOME"
    echo "Current user: $LOGNAME"
    echo "Shell being used: $SHELL"
    echo "Current PATH: $PATH"
    
    ## Creating a new environment variable
    export MY_VARIABLE="Hello from my variable"
    
    ## Displaying the new variable
    echo "My new variable: $MY_VARIABLE"
    
    ## Creating a child process to demonstrate variable scope
    bash -c 'echo "MY_VARIABLE in child process: $MY_VARIABLE"'
    
    ## Removing the environment variable
    unset MY_VARIABLE
    
    ## Verifying the variable is unset
    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:

    Этот скрипт демонстрирует, как получить доступ к существующим переменным окружения, создать новые и удалить их.

Резюме

В этом практическом занятии (lab) вы научились работать с переменными оболочки (shell variables) в Linux. Вы изучили создание и ссылку на переменные, использование замены команды (command substitution) для присвоения вывода команды переменным, выполнение арифметических операций с переменными и работу с переменными окружения. Эти навыки являются важной основой для написания скриптов оболочки (shell scripting) и будут неоценимы при дальнейшей работе с системами Linux.

Основные выводы из этого практического занятия:

  • Создание и ссылка на переменные оболочки (shell variables)
  • Использование специального синтаксиса для ссылки на переменные в различных сценариях
  • Применение замены команды (command substitution) для сохранения вывода команды
  • Выполнение арифметических операций с переменными оболочки (shell variables)
  • Работа с переменными окружения

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