Unix / Linux - Variáveis ​​Especiais

Neste capítulo, discutiremos em detalhes sobre variáveis ​​especiais no Unix. Em um de nossos capítulos anteriores, entendemos como ter cuidado ao usar certos caracteres não alfanuméricos em nomes de variáveis. Isso ocorre porque esses caracteres são usados ​​nos nomes de variáveis ​​especiais do Unix. Essas variáveis ​​são reservadas para funções específicas.

Por exemplo, o $ caractere representa o número de identificação do processo, ou PID, do shell atual -

$echo $$

O comando acima escreve o PID do shell atual -

29949

A tabela a seguir mostra uma série de variáveis ​​especiais que você pode usar em seus scripts de shell -

Sr. Não. Variável e Descrição
1

$0

O nome do arquivo do script atual.

2

$n

Essas variáveis ​​correspondem aos argumentos com os quais um script foi chamado. Aquin é um número decimal positivo correspondente à posição de um argumento (o primeiro argumento é $ 1, o segundo argumento é $ 2 e assim por diante).

3

$#

O número de argumentos fornecidos a um script.

4

$*

Todos os argumentos estão entre aspas duplas. Se um script receber dois argumentos, $ * é equivalente a $ 1 $ 2.

5

$@

Todos os argumentos são individualmente aspas duplas. Se um script receber dois argumentos, $ @ é equivalente a $ 1 $ 2.

6

$?

O status de saída do último comando executado.

7

$$

O número do processo do shell atual. Para scripts de shell, este é o ID do processo sob o qual eles estão executando.

8

$!

O número do processo do último comando em segundo plano.

Argumentos de linha de comando

Os argumentos de linha de comando $ 1, $ 2, $ 3, ... $ 9 são parâmetros posicionais, com $ 0 apontando para o comando, programa, script de shell ou função real e $ 1, $ 2, $ 3, ... $ 9 como os argumentos para o comando.

O script a seguir usa várias variáveis ​​especiais relacionadas à linha de comando -

#!/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 : $#"

Aqui está um exemplo de execução do script acima -

$./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

Parâmetros especiais $ * e $ @

Existem parâmetros especiais que permitem acessar todos os argumentos da linha de comando de uma vez. $* e $@ ambos agirão da mesma forma, a menos que estejam entre aspas duplas, "".

Ambos os parâmetros especificam os argumentos da linha de comando. No entanto, o parâmetro especial "$ *" pega a lista inteira como um argumento com espaços entre e o parâmetro especial "$ @" pega a lista inteira e a separa em argumentos separados.

Podemos escrever o script de shell como mostrado abaixo para processar um número desconhecido de argumentos de linha de comando com os parâmetros especiais $ * ou $ @ -

#!/bin/sh

for TOKEN in $*
do
   echo $TOKEN
done

Aqui está um exemplo de execução do script acima -

$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old

Note - aqui do...done é um tipo de loop que será abordado em um tutorial subsequente.

Status de saída

o $? variável representa o status de saída do comando anterior.

O status de saída é um valor numérico retornado por cada comando após sua conclusão. Como regra, a maioria dos comandos retorna um status de saída 0 se foram bem-sucedidos e 1 se não tiveram êxito.

Alguns comandos retornam status de saída adicionais por motivos específicos. Por exemplo, alguns comandos diferenciam entre os tipos de erros e retornam vários valores de saída dependendo do tipo específico de falha.

A seguir está o exemplo de comando bem-sucedido -

$./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
$