Учебники

Unix / Linux — специальные переменные

В этой главе мы подробно обсудим специальные переменные в 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, если они были неудачными.

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

Ниже приведен пример успешной команды —