В этой главе мы подробно обсудим специальные переменные в Unix. В одной из наших предыдущих глав мы поняли, как быть осторожными, когда мы используем определенные не буквенно-цифровые символы в именах переменных. Это потому, что эти символы используются в именах специальных переменных Unix. Эти переменные зарезервированы для определенных функций.
Например, символ $ представляет идентификационный номер процесса или PID текущей оболочки —
$echo $$
Приведенная выше команда записывает PID текущей оболочки —
29949
В следующей таблице показан ряд специальных переменных, которые вы можете использовать в своих сценариях оболочки:
Sr.No. | Переменная и описание |
---|---|
1 |
$ 0 Имя файла текущего скрипта. |
2 |
$ п Эти переменные соответствуют аргументам, с которыми был вызван скрипт. Здесь n — положительное десятичное число, соответствующее положению аргумента (первый аргумент — $ 1, второй аргумент — $ 2 и т. Д.). |
3 |
$ # Количество аргументов, предоставленных скрипту. |
4 |
$ * Все аргументы в двойных кавычках. Если скрипт получает два аргумента, $ * эквивалентно $ 1 $ 2. |
5 |
$ @ Все аргументы индивидуально указаны в двойных кавычках. Если скрипт получает два аргумента, $ @ эквивалентно $ 1 $ 2. |
6 |
$? Статус выхода последней выполненной команды. |
7 |
$$ Номер процесса текущей оболочки. Для сценариев оболочки это идентификатор процесса, под которым они выполняются. |
8 |
$! Номер процесса последней фоновой команды. |
$ 0
Имя файла текущего скрипта.
$ п
Эти переменные соответствуют аргументам, с которыми был вызван скрипт. Здесь n — положительное десятичное число, соответствующее положению аргумента (первый аргумент — $ 1, второй аргумент — $ 2 и т. Д.).
$ #
Количество аргументов, предоставленных скрипту.
$ *
Все аргументы в двойных кавычках. Если скрипт получает два аргумента, $ * эквивалентно $ 1 $ 2.
$ @
Все аргументы индивидуально указаны в двойных кавычках. Если скрипт получает два аргумента, $ @ эквивалентно $ 1 $ 2.
$?
Статус выхода последней выполненной команды.
$$
Номер процесса текущей оболочки. Для сценариев оболочки это идентификатор процесса, под которым они выполняются.
$!
Номер процесса последней фоновой команды.
Аргументы командной строки
Аргументы командной строки $ 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
Примечание. Здесь do … done — это своего рода цикл, который будет описан в следующем руководстве.
Статус выхода
$? Переменная представляет состояние выхода предыдущей команды.
Состояние выхода — это числовое значение, возвращаемое каждой командой после ее завершения. Как правило, большинство команд возвращают состояние выхода 0, если они были успешными, и 1, если они были неудачными.
Некоторые команды возвращают дополнительные состояния выхода по определенным причинам. Например, некоторые команды различают виды ошибок и возвращают различные значения выхода в зависимости от конкретного типа ошибки.
Ниже приведен пример успешной команды —