Unix / Linux - Специальные переменные
Здравствуйте, будущие программисты! Я рад приветствовать вас на этом захватывающем пути в мир специальных переменных Unix и Linux. Как某人, кто teaches computer science на протяжение многих лет, я могу заверить вас, что овладение этими концепциями изменит правила игры в вашем программировании. Итак, погружаемся в это!
Введение в специальные переменные
Прежде чем углубиться в детали, давайте поймем, что такое специальные переменные. В Unix и Linux специальные переменные - это предопределенные переменные, которые хранят конкретную информацию о среде shell и текущем процессе. Они resemble secret agents в мире shell, всегда готовые с важной информацией!
Командные аргументы
Что такое командные аргументы?
Командные аргументы - это дополнительные фрагменты информации, которые вы предоставляете скрипту при его выполнении. Это как давать инструкции роботу перед началом его задачи.
Давайте рассмотрим простой пример:
#!/bin/bash
echo "Hello, $1!"
Если мы сохраним этот скрипт как greet.sh
и выполним его с помощью ./greet.sh Alice
, он выведет:
Hello, Alice!
Здесь $1
- это специальная переменная, представляющая первый командный аргумент.
Использование нескольких аргументов
Мы не ограничены одним аргументом. Давайте расширяем наш скрипт:
#!/bin/bash
echo "Hello, $1! Welcome to $2."
Теперь, если мы выполним ./greet.sh Alice Wonderland
, мы получим:
Hello, Alice! Welcome to Wonderland.
Здесь $1
represents "Alice", а $2
represents "Wonderland".
Переменная $0
Есть еще одна специальная переменная, worth mentioning: $0
. Эта переменная represents имя скрипта само. Давайте изменим наш скрипт:
#!/bin/bash
echo "This script is called $0"
echo "Hello, $1! Welcome to $2."
Выполнение ./greet.sh Alice Wonderland
теперь выводит:
This script is called ./greet.sh
Hello, Alice! Welcome to Wonderland.
Специальные параметры $* и $@
Теперь давайте поговорим о двух очень полезных специальных параметрах: $*
и $@
. Это как динамическая пара командных аргументов!
Параметр $*
Параметр $*
represents все командные аргументы как одну строку. Это как положить все ваши аргументы в одну корзину. Вот пример:
#!/bin/bash
echo "All arguments using \$*: $*"
Если мы выполним этот скрипт с помощью ./args.sh apple banana cherry
, мы получим:
All arguments using $*: apple banana cherry
Параметр $@
Параметр $@
аналогичен, но он treat каждый аргумент как отдельную сущность. Это как держать каждый аргумент в своем маленьком ящике. Давайте увидим это в действии:
#!/bin/bash
echo "All arguments using \$@:"
for arg in "$@"
do
echo $arg
done
Выполнение этого с помощью ./args.sh apple banana cherry
дает:
All arguments using $@:
apple
banana
cherry
Разница между $* и $@
Вы можете задаться вопросом: "Они look такие же для меня!" Ну, разница становится очевидной, когда мы используем их в двойных кавычках. Давайте создадим скрипт для демонстрации:
#!/bin/bash
echo "Using \$*:"
for arg in "$*"
do
echo $arg
done
echo "Using \$@:"
for arg in "$@"
do
echo $arg
done
Если мы выполним это с помощью ./difference.sh "Hello World" OpenAI ChatGPT
, мы получим:
Using $*:
Hello World OpenAI ChatGPT
Using $@:
Hello World
OpenAI
ChatGPT
См. разницу? "$*"
treat все аргументы как одну строку, в то время как "$@"
preserve отдельные аргументы.
Статус выхода
Последнее, но не менее важное, давайте поговорим о статусе выхода. В Unix и Linux каждая команда возвращает статус выхода после завершения выполнения. Этот статус - это число от 0 до 255, где 0 обычно означает успех, а любое другое число indicates ошибку.
Переменная $?
Статус выхода последней выполненной команды хранится в переменной $?
. Давайте увидим это в действии:
#!/bin/bash
ls /nonexistent_directory
echo "Exit status of ls command: $?"
echo "Hello, World!"
echo "Exit status of echo command: $?"
Выполнение этого скрипта может вывести:
ls: cannot access '/nonexistent_directory': No such file or directory
Exit status of ls command: 2
Hello, World!
Exit status of echo command: 0
Команда ls
failed (статус выхода 2), в то время как команда echo
succeeded (статус выхода 0).
Использование статуса выхода в скриптах
Мы можем использовать статус выхода для принятия решений в наших скриптах. Вот пример:
#!/bin/bash
ping -c 1 google.com > /dev/null
if [ $? -eq 0 ]
then
echo "Internet is working!"
else
echo "Internet is not working!"
fi
Этот скрипт ping Google один раз и проверяет статус выхода. Если он равен 0 (успех), это означает, что интернет работает.
Заключение
Поздравляю! Вы только что сделали большой шаг в вашем пути программирования Unix/Linux. Эти специальные переменные могут показаться маленькими, но они incredibly powerful инструменты в вашем наборе инструментов для программирования. Помните, что практика делает мастера, так что не стесняйтесь экспериментировать с этими концепциями в своих собственных скриптах.
Вот quick reference таблица специальных переменных, которые мы рассмотрели:
Переменная | Описание |
---|---|
$0 | Имя скрипта |
$1, $2, ... | Командные аргументы |
$* | Все аргументы как одна строка |
$@ | Все аргументы как separate строки |
$? | Статус выхода последней команды |
Продолжайте программировать, продолжайте учиться и, самое главное, получайте удовольствие! До следующего раза, счастливого скриптинга!
Credits: Image by storyset