Bash script – Variáveis especiais

Linguagem BASH.

Neste artigo sobre linguagem de programação BASH, vou dar a conhecer algumas variáveis especiais do BASH. Estas variáveis são muito importantes na programação com esta linguagem. Perceber a importância de cada uma delas é fundamental para quem quer realmente saber programar em BASH.

Apesar de ser conceitos muito básicos da linguagem têm de ser bem compreendidos. Vou descrever todas elas uma por uma, explicando para que servem. Os scripts de exemplo que se encontram no final do artigo vão demonstrar de forma prática, a sua utilização numa situação real.

Variáveis Especiais

Estas variáveis especiais do BASH são variáveis apenas de leitura. Quer dizer que só podemos obter o seu valor, não é possível atribuir-lhes algum tipo de valor. Ao criarmos variáveis para usarmos nos nossos scripts temos que ter em conta que não podemos criar variáveis com estes nomes. Os valores são definidos internamente pelo BASH quer em tempo de execução de um script quer seja na inicialização do script, isto depende da variável em questão.

Estas são as variáveis especiais.

variáveldefinição
$*Esta variável contem todos os valores dos “argumentos” que foram passados ao script, quando o script foi chamado pela linha de comando. Estes valores são separados por ” ” um espaço. Esta variável já não é muito usada pois costuma induzir em erro. A próxima variável é usada em seu lugar.
$@Esta variável contem todos os valores dos “argumentos” que foram passados ao script, quando o script foi chamado pela linha de comando. Estes valores são separados por ” ” um espaço.
$#Esta variável contem o numero de argumentos passados ao script. A contagem começa em um e não em zero. É um numero na base dez, decimal.
$?Esta variável contem o valor de retorno do ultimo comando executado no script em modo encadeado “pipeline”. Esta variável é muito importante pois permite-nos saber se correu bem ao mal tudo aquilo que mandamos executar e tomar decisões dependendo desse resultado.
$$Esta variável contem o valor do id do seu próprio processo. Podia-mos usa-lo para construir uma lógica de comunicação entre processos. Cada processo seria identificado pelo seu id de processo, enviando aos outros o processo a que devem responder e visse versa.
$!Esta variável contem o valor do ID do ultimo comando executado de forma assíncrona. Apesar de neste artigo ser muito cedo para falar concretamente deste assunto pretendo em outros artigos tratar deste assunto.
$0Esta variável contem o nome pelo qual o script em si foi chamado.
$_Esta variável no inicio, antes de mais nada ser executado contem o caminho e nome do script ou shell pelo qual foi chamado na linha de comando. Depois no decorrer do script esta variável contem o valor do ultimo argumento do ultimo comando que foi executado. Alem disso esta variável é exportada para o ambiente. Vou abordar as variáveis de ambiente no próximo artigo.
$1,$2,$3,$…As variáveis $1,$2,$3 e por ai adiante contêm o valor de cada argumento passado ao script. A variável $1 contem o valor do argumento 1 e por ai adiante.

Este script demonstra como usar os argumentos passados ao script pela linha de comando. É bem simples mas podemos ver como obtemos os argumentos dentro do script bem com o número de argumentos. O script faz uso do variável “$#” e “$1, $2, $3“, bem como da variável $@.

#!/bin/bash

# var_especiais_ex_1.sh
# Este script escreve no ecrã o número de argumentos
# e os quatro primeiros argumentos passados ao script,
# bem como escreve o que a variável $@ contem.

# Escrever o que a variável $@ contem.
echo "A variável contem: $@"

# Número de argumentos
echo "Foram passados ao script $# argumentos"

# Argumentos
echo "O argumento um é : $1"
echo "O argumento dois é : $2"
echo "O argumento três é : $3"
echo "O argumento quatro é : $4"

Executamos este script desta forma:

miguel@LUA:~/Scripts/bash$ ./var_especiais_ex_1.sh a b c d
A variável contem: a b c d
Foram passados ao script 4 argumentos
O argumento um é : a
O argumento dois é : b
O argumento três é : c
O argumento quatro é : d

Corra o script com outros argumentos a fim de testar o seu funcionamento.

 

Este script demonstra como funciona a variável “$_“.

#!/bin/bash

# var_especiais_ex_2.sh
# Este script demonstra coma funciona a variável $_

# Escrever a variável $_ no inicio do script
echo "A variável contem: $_"

# Escrever uma linha com traços
echo "---------------------"

# Escrever a variável $_ novamente
echo "A variável contem: $_"

Executamos este script desta forma:

miguel@LUA:~/Scripts/bash$ ./var_especiais_ex_2.sh
A variável contem: ./var_especiais_ex_2.sh
---------------------
A variável contem: ---------------------

Como podemos ver a variável no inicio do script tinha o nome do script, no final já contem o ultimo argumento do ultimo comando executado.

 

Este script demonstra como a variável “$$” e a variável “$0” funciona.

#!/bin/bash

# var_especiais_ex_3.sh
# Este script demonstra coma funciona a variável $$,
# bem como a variavel $0.

# Escrever a variável $$ que escreve o ID do processo
echo "O ID do processo é: $$"

# Escrever uma linha vazia
echo

# Escrever a variável $0
echo "A variável contem: $0"

Executamos este script desta forma:

miguel@LUA:~/Scripts/bash$ ./var_especiais_ex_3.sh
O ID do processo é: 12314

A variável contem: ./var_especiais_ex_3.sh

Este script demonstra como funciona a variável “$?“.

#!/bin/bash

# var_especiais_ex_4.sh
# Este script demonstra coma funciona a variável $?.

# Executar o comando ls -l para listar os ficheiros
# no directoria corrente.
ls -l

# Escrever a variável $? com o retorno do comando anterior
echo "O retorno do comando é: $?"

# Executar o comando ls -l para listar os ficheiros
# em uma directoria inexistente a fim de provocar um erro.
ls -l /dev/carros/velhos

# Escrever a variável $? com o retorno do comando anterior
echo "O retorno do comando é: $?"

Executamos este script desta forma:

miguel@LUA:~/Scripts/bash$ ./var_especiais_ex_4.sh
total 32
-rwxrwxr-x 1 miguel miguel 481 Nov 26 18:18 var_especiais_ex_1.sh
-rwxrwxr-x 1 miguel miguel 298 Nov 26 18:25 var_especiais_ex_2.sh
-rwxrwxr-x 1 miguel miguel 295 Nov 26 18:33 var_especiais_ex_3.sh
-rwxrwxr-x 1 miguel miguel 504 Nov 26 18:48 var_especiais_ex_4.sh
-rwxrwxr-x 1 miguel miguel 327 Nov 26 18:55 var_especiais_ex_5.sh
-rwxrwxr-x 1 miguel miguel  75 Nov 25 15:36 var_ex_1.sh
-rwxrwxr-x 1 miguel miguel  33 Nov 26 13:44 var_ex_2.sh
-rwxrwxr-x 1 miguel miguel  44 Nov 25 15:35 var_ex_3.sh
O retorno do comando é: 0
ls: impossível aceder a /dev/carros/velhos: Ficheiro ou directoria inexistente
O retorno do comando é: 2

Este script demonstra como funciona a variável “$!“.

#!/bin/bash

# var_especiais_ex_5.sh
# Este script demonstra coma funciona a variável $!.

# Executar o comando ls -l de forma assíncrona para 
# listar os ficheiros no directoria corrente.
ls -l > /dev/null &

# Escrever a variável $! com o ID do ultimo
# programa executado assincronamente.
echo "O ID do comando é: $!"

Executamos este script desta forma:

miguel@LUA:~/Scripts/bash$ ./var_especiais_ex_5.sh
O ID do comando é: 12450

 

Este artigo também é bastante fácil, mas é percebendo e experimentando estas pequenas coisas fáceis que se vão conseguindo fazer coisas cada vez mais elaboradas, visto que a nossa compreensão do BASH vai aumentando.

 

 Duvidas e ideias que queiram discutir sobre BASH podem ser discutidas aqui.

 

Partilhem, comentem e experimentem!

Artigos Relacionados:

Deixe uma resposta