Variáveis no Shell do Linux: Guia Completo

No Shell do Linux, variáveis são fundamentais para armazenar dados, controlar fluxo e interagir com o sistema. Este guia aborda os principais tipos de variáveis, desde posicionais até arrays, com exemplos práticos e boas práticas.

Variáveis Posicionais

Essas variáveis representam os argumentos passados na linha de comando para um script. Veja os principais:

#!/bin/bash
# Nome do script
echo "Script: $0"
# Quantidade de argumentos
echo "Args: $#"
# Primeiro argumento
echo "Arg1: $1"
# Todos os argumentos (como string única)
echo "\$*: $*"
# Todos os argumentos (como lista separada)
echo "\$@: $@"

Diferença entre $* e $@: Quando entre aspas duplas, $* trata todos os argumentos como uma única string, enquanto $@ os mantém como elementos separados (útil em loops).

Exercício prático – Validar número de argumentos:

#!/bin/bash
if [ $# -ne 2 ]; then
    echo "Uso: $0 arg1 arg2"
    exit 1
fi
echo "Argumentos: $1 e $2"

Variáveis de Status

A variável $? armazena o código de retorno do último comando executado. 0 indica sucesso, qualquer outro valor indica erro.

Exemplo de uso em backup:

#!/bin/bash
mv documento.txt backup/
retorno=$?
if [ $retorno -eq 0 ]; then
    echo "Movimentação bem-sucedida."
else
    echo "Falha ao mover o arquivo."
fi
echo "Código de retorno: $retorno"

Variáveis Especiais: Expansão com Valor Padrão

O Shell oferece operadores para definir valores padrão ou verificar existência de variáveis. Os mais comuns são:

  • ${var:-padrao} – Usa padrao se var não existir ou for nulo (com :).
  • ${var:=padrao} – Atribui padrao a var se ela não existir ou for nula.
  • ${var:+novo} – Usa novo se var existir e não to nula.
  • ${var:?mensagem} – Exibe mensagem e termina o script se var não existir ou for nula.

Exemplo prático:

#!/bin/bash
echo "var não definida: ${var:-fallback}"
echo "var após := : ${var:=valorAtribuido}"
echo "var agora: $var"
echo "substituição com +: ${var:+SUBSTITUIDO}"
unset var
echo "teste com ?: ${var:?ERRO: variável necessária}"

Aplicação empresarial – Usar ${path:-/tmp} em comandos de exclusão para evitar operações em diretórios inexistentes:

find ${camino:-/tmp} -name "*.log" -mtime +7 -exec rm {} \;

Substrings de Variáveis

O Shell permite extrair porções de strings e calcular comprimentos. Sintaxe básica:

Operação Sintaxe Exemplo
Comprimento ${#var} ${#nome} → 5 se nome="Maria"
Extrair substring ${var:posição:comprimento} ${texto:2:3}
Remover prefixo curto ${var#padrão} ${arquivo#*.}
Remover sufixo curto ${var%padrão} ${arquivo%.*}

Exemplo de uso:

#!/bin/bash
frase="Olá mundo Linux"
echo "Tamanho: ${#frase}"
echo "Fatia (0,3): ${frase:0:3}"
echo "Remover primeiro 'Linux': ${frase#Linux}"
echo "Remover último 'mundo': ${frase%mundo}"

Formas de Atribuição de Variáveis

Existem três métodos principais:

  1. Direta: nome="João"
  2. Por argumento: a=$1 (recebe o primeiro parâmetro do script)
  3. Via comando read: ``` #!/bin/bash read -t 10 -p "Digite sua idade: " idade echo "Idade informada: $idade"
    
    

Exemplo empresarial com read – Menu interativo:

#!/bin/bash
cat <<EOF
  1. Instalar Apache
  2. Instalar Nginx
  3. Sair
EOF
read -p "Escolha uma opção: " opcao
# Valida se é número
expr $opcao + 1 >/dev/null 2>&1
if [ $? -ne 0 ] || [ -z "$opcao" ]; then
    echo "Opção inválida! Use números."
    exit 1
fi
case $opcao in
    1) echo "Instalando Apache...";;
    2) echo "Instalando Nginx...";;
    3) echo "Saindo..."; exit;;
    *) echo "Opção inválida!"; exit 1;;
esac

Arrays no Shell

Arrays permitem armazenar múltiplos valores em uma única variável. São indexados a partir de 0.

Declaração estática:

# Método 1 (recomendado)
frutas=("maçã" "banana" "laranja")
# Método 2 (com índices explícitos)
animais=([0]="cachorro" [1]="gato" [2]="pássaro")

Declaração dinâmica (com saída de comandos):

arquivos=($(ls *.txt))
# ou
arquivos=(`ls *.txt`)

Acessando elementos:

echo "${frutas[@]}"        # Todos os elementos
echo "${#frutas[@]}"       # Quantidade de elementos
echo "${frutas[1]}"        # Segundo elemento (índice 1)

Modificando o array:

frutas[3]="uva"            # Adiciona novo elemento
frutas[0]="morango"        # Substitui o primeiro
unset frutas[1]            # Remove o segundo elemento
unset frutas               # Remove o array inteiro

Fatiamento e substituição (funciona como substring):

cores=("vermelho" "azul" "verde" "amarelo")
echo "${cores[@]:1:2}"     # "azul verde" (a partir do índice 1, 2 elementos)
echo "${cores[@]/verde/roxo}"  # Substitui "verde" por "roxo" (não altera original)

Exemplo prático – Filtrar palavras com até 6 caracteres:

#!/bin/bash
palavras=("eu" "sou" "um" "exemplo" "de" "shell")
echo "Palavras com ≤6 letras:"
for p in "${palavras[@]}"; do
    if [ ${#p} -le 6 ]; then
        echo "$p"
    fi
done

# Alternativa usando for com índice
echo "---------------"
for (( i=0; i<${#palavras[@]}; i++ )); do
    if [ ${#palavras[i]} -le 6 ]; then
        echo "${palavras[i]}"
    fi
done

Tags: shell Bash variaveis Arrays substrings

Publicado em 6-22 05:37