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
$