Unix / Linux - специальные переменные
В этой главе мы подробно обсудим специальные переменные в Unix. В одной из наших предыдущих глав мы поняли, как быть осторожными при использовании определенных не буквенно-цифровых символов в именах переменных. Это потому, что эти символы используются в именах специальных переменных Unix. Эти переменные зарезервированы для определенных функций.
Например, $ символ представляет собой идентификационный номер процесса или PID текущей оболочки -
$echo $$
Приведенная выше команда записывает PID текущей оболочки -
29949
В следующей таблице показан ряд специальных переменных, которые можно использовать в сценариях оболочки.
Sr. No. | Переменная и описание |
---|---|
1 | $0 Имя файла текущего скрипта. |
2 | $n Эти переменные соответствуют аргументам, с которыми был вызван сценарий. Вотn - положительное десятичное число, соответствующее позиции аргумента (первый аргумент - $ 1, второй аргумент - $ 2 и т. д.). |
3 | $# Количество аргументов, предоставленных сценарию. |
4 | $* Все аргументы заключены в двойные кавычки. Если сценарий получает два аргумента, $ * эквивалентно $ 1 $ 2. |
5 | $@ Все аргументы отдельно взяты в двойные кавычки. Если сценарий получает два аргумента, $ @ эквивалентно $ 1 $ 2. |
6 | $? Статус выхода последней выполненной команды. |
7 | $$ Номер процесса текущей оболочки. Для сценариев оболочки это идентификатор процесса, под которым они выполняются. |
8 | $! Номер процесса последней фоновой команды. |
Аргументы командной строки
Аргументы командной строки $ 1, $ 2, $ 3, ... $ 9 являются позиционными параметрами, где $ 0 указывает на фактическую команду, программу, сценарий оболочки или функцию, а $ 1, $ 2, $ 3, ... $ 9 - в качестве аргументов для команда.
Следующий скрипт использует различные специальные переменные, связанные с командной строкой -
#!/bin/sh
echo "File Name: $0"
echo "First Parameter : $1"
echo "Second Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
Вот пример запуска вышеуказанного скрипта -
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
Специальные параметры $ * и $ @
Есть специальные параметры, которые позволяют получить доступ ко всем аргументам командной строки сразу. $* и $@ оба будут действовать одинаково, если они не заключены в двойные кавычки, "".
Оба параметра указывают аргументы командной строки. Однако специальный параметр «$ *» принимает весь список как один аргумент с пробелами между ними, а специальный параметр «$ @» берет весь список и разделяет его на отдельные аргументы.
Мы можем написать сценарий оболочки, как показано ниже, для обработки неизвестного количества аргументов командной строки с помощью специальных параметров $ * или $ @ -
#!/bin/sh
for TOKEN in $*
do
echo $TOKEN
done
Вот пример запуска вышеуказанного скрипта -
$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old
Note - здесь do...done это своего рода цикл, который будет рассмотрен в следующем руководстве.
Статус выхода
В $? переменная представляет собой статус выхода предыдущей команды.
Статус выхода - это числовое значение, возвращаемое каждой командой после ее завершения. Как правило, большинство команд возвращают статус выхода 0, если они были успешными, и 1, если они не были успешными.
Некоторые команды по определенным причинам возвращают дополнительные статусы выхода. Например, некоторые команды различают типы ошибок и возвращают различные значения выхода в зависимости от конкретного типа сбоя.
Ниже приведен пример успешной команды -
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
$echo $?
0
$