Shell script - Variáveis especiais

Publicado por Vitor Luis em 11/06/2013

[ Hits: 27.363 ]

Blog: http://howtolinux.com.br/

 


Shell script - Variáveis especiais



Olá pessoal, hoje vou falar sobre algumas variáveis especiais que podemos utilizar em nossos scripts em shell. Então vamos lá.

Existem algumas variáveis especiais, que podemos utilizar em nosso script, para verificação de parâmetros, valores de retorno de comandos e parâmetros para funções dentro de nosso próprio script, etc.

Abaixo segue uma tabela com essas variáveis especiais que estão disponíveis no shell:

Variável Descrição
$0 Parâmetro número 0 (nome do comando ou função)
$1 Parâmetro número 1 (da linha de comando ou função)
... Parâmetro número N (da linha de comando ou função)
$9 Parâmetro número 9 (da linha de comando ou função)
${10} Parâmetro número 10 (da linha de comando ou função)
$# Número total de parâmetros da linha de comando ou função
$* Todos os parâmetros, como uma string única
$@ Todos os parâmetros, como várias strings protegidas
$$ PID do processo atual (do próprio script)
$! PID do último processo em segundo plano
$_ Último argumento do último comando executado
$? Valor de retorno do último comando executado


Vejamos agora alguns exemplos utilizando essas variáveis especiais. Segue alguns scritps abaixo:

#!/bin/bash
cat /etc/arquivo_nao_existe
echo $?

O script acima vai tentar imprimir na tela um arquivo que não existe, e vai ser impresso na tela o número do erro, que no caso é 1. Vejamos um outro exemplo:

#!/bin/bash
if [ -z $1 ]; then
    echo -e "Arquivo não encontrado"
else
    cat $1
fi

No script acima é para ser recebido um parâmetro, esse parâmetro é o nome do arquivo a ser impresso na tela, caso o parâmetro não seja passado é impresso o código do erro. Vejamos agora um exemplo um pouco mais complexo:

#!/bin/bash
echo -e "Nome do Script: $0"
echo -e "PID do Script: $$"
echo -e "Número de Parâmetros Passados: $#"


if [ $# -gt 0 ]; then
    for n in $(seq 1 $#); do
        echo -n "Parâmetro  $n: "
        eval echo -e '$'$n
    done
    echo -e "Todos os parâmetros em uma única string: $*"
else
    echo -e "Nenhum parâmetro foi passado, então nada será impresso"
fi

Quando executar o nosso script dessa forma, teremos essa saída:

./script.sh param1 param2 param3
Nome do Script: ./script.sh
PID do Script: 6249
Número de Parâmetros Passados: 3
Parâmetro 1: param1
Parâmetro 2: param2
Parâmetro 3: param3
Todos os parâmetros em uma única string: param1 param2 param3
Caso seja executado não passando nenhum parâmetro, teremos essa saída:

./script.sh
Nome do Script: ./script.sh
PID do Script: 6258
Número de Parâmetros Passados: 0
Nenhum parâmetro foi passado, então nada será impresso
Por hoje é isso pessoal, espero que seja útil para todos vocês.
Quem tiver dúvidas, críticas e/ou sugestões, comentem aí.

Abraços!

Dica publicada originalmente em:
Outras dicas deste autor

Split de String em C++

Manipulação de strings no bash

Compilando PHP 5.4.X no Debian/Ubuntu

Leitura recomendada

Aulas Shell Script do zero - Completo

Performance awk x grep

Utilizando o vim

Comando para envio de dados via console para outro console

Automatização da instalação do plugin JAVA (Mozilla)

  

Comentários
[1] Comentário enviado por goll72 em 15/12/2020 - 22:58h

Acho interessante também citar variáveis que não usam caracteres especiais, mas que são geradas pelo shell e podem ser usadas de forma bem prática:

Variáveis POSIX:
$PWD - Diretório atual
$OLDPWD - Diretório em que você estava anteriormente
$USER - Usuário logado
$SHELL - O shell padrão do usuário logado
$SHLVL - Mostra quantos "níveis / camadas" de shell há no momento. Exemplo: Ao fazer login no tty, o $SHLVL é 1. Ao iniciar uma sessão X11 o $SHLVL sobe para 2, porque (surpresa) o startx é apenas um shell script. Ao abrir um emulador de terminal, o $SHLVL sobe para 3, porque há um shell rodando no terminal.
$IFS - Separador de "campo" - O conteúdo dessa variável será utilizado para separar e dividir palavras e expressões em campos, que podem ser acessados usando $1 - $n

Variáveis que não são POSIX (são encontradas no bash, zsh, etc., mas não no POSIX sh):
$EUID - ID efetivo do usuário logado - tem a mesma funcão que $(id -u), uma versão que pode ser usada em sistemas POSIX
$EGID - ID efetivo do grupo do usuário logado - tem a mesma funcão que $(id -g)
$UID - ID real do usuário logado - tem a mesma função que $(id -ru)
$GID - ID real do grupo do usuário logado - tem a mesma funcão que $(id -rg)
$RANDOM - Retorna uma número aleatório entre 0 e 32767.
$COLUMNS - Retorna o número de colunas que o terminal conectado ao shell possui
$LINES - Retorna o número de linhas que o terminal conectado ao shell possui

Variável bônus, exclusiva do zsh:
$FUNCNEST - Quantas vezes pode ocorrer um "nest" de funções, ou seja, quantas vezes pode ocorrer uma função dentro de outra função. Exemplo: Criando a função lol() { lol; } e executando-a com lol; o zsh retorna que o nível máximo de funções aninhadas foi alcançado, porque essa função se reexecuta indefinidamente. O zsh usa muito esse recurso de aninhamento de funções internamente, visto que ao reduzir o valor dessa variável para 10, tentar utilizar recursos como autocompleção de comando (via TAB) falha, devido ao excesso de aninhamento de funções.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts