Pular para o conteúdo principal

Capítulo 6.2 - Variáveis e Parâmetros

Objetivos de Aprendizagem​

Ao final deste capítulo, você será capaz de:

  • Utilizar variáveis avançadas
  • Trabalhar com parâmetros de script
  • Compreender variáveis especiais
  • Utilizar arrays
  • Gerenciar variáveis de ambiente

Variáveis Avançadas​

Substituição de Variáveis​

#!/bin/bash
VAR="hello"

# Valor padrão
echo ${VAR:-"default"} # hello (se VAR existe)
echo ${UNDEF:-"default"} # default (se UNDEF não existe)

# Atribuir se não definida
echo ${VAR:="default"} # hello (VAR já existe)
echo ${UNDEF:="default"} # default (e atribui UNDEF)

# Erro se não definida
echo ${VAR:?"VAR não está definida"} # OK
echo ${UNDEF:?"UNDEF não está definida"} # Erro

# Remover prefixo/sufixo
FILE="fichier.txt"
echo ${FILE%.txt} # fichier (remove .txt)
echo ${FILE#fichier} # .txt (remove fichier)

Comprimento de String​

#!/bin/bash
TEXT="Linux"
echo ${#TEXT} # 5 (comprimento)

Extração de Substring​

#!/bin/bash
TEXT="Hello Linux World"
echo ${TEXT:6} # Linux World (a partir da posição 6)
echo ${TEXT:6:5} # Linux (posição 6, comprimento 5)

Parâmetros de Script​

Argumentos Posicionais​

#!/bin/bash
# $0: Nome do script
# $1, $2, $3...: Argumentos
# $#: Número de argumentos
# $@: Todos os argumentos (separados)
# $*: Todos os argumentos (uma string)

echo "Script: $0"
echo "Primeiro: $1"
echo "Segundo: $2"
echo "Quantidade: $#"
echo "Todos (@): $@"
echo "Todos (*): $*"

Exemplo:

./script.sh arg1 arg2 arg3
# $0 = ./script.sh
# $1 = arg1
# $2 = arg2
# $3 = arg3
# $# = 3

Deslocamento de Argumentos​

#!/bin/bash
# shift: Desloca os argumentos
echo "1: $1"
shift
echo "2: $1" # Antigo $2
shift
echo "3: $1" # Antigo $3

Percorrer os Argumentos​

#!/bin/bash
# Método 1: $@
for arg in "$@"; do
echo "Argumento: $arg"
done

# Método 2: $*
for arg in $*; do
echo "Argumento: $arg"
done

# Método 3: while com shift
while [ $# -gt 0 ]; do
echo "Argumento: $1"
shift
done

Arrays​

Declaração​

#!/bin/bash
# Declaração
FRUITS=("pomme" "banane" "orange")

# Ou
FRUITS[0]="pomme"
FRUITS[1]="banane"
FRUITS[2]="orange"

Acesso​

#!/bin/bash
FRUITS=("pomme" "banane" "orange")

# Elemento específico
echo ${FRUITS[0]} # pomme
echo ${FRUITS[1]} # banane

# Todos os elementos
echo ${FRUITS[@]} # pomme banane orange
echo ${FRUITS[*]} # pomme banane orange

# Comprimento
echo ${#FRUITS[@]} # 3

# Índices
echo ${!FRUITS[@]} # 0 1 2

Percorrer um Array​

#!/bin/bash
FRUITS=("pomme" "banane" "orange")

# Por valor
for fruit in "${FRUITS[@]}"; do
echo "Fruta: $fruit"
done

# Por índice
for i in "${!FRUITS[@]}"; do
echo "$i: ${FRUITS[$i]}"
done

Variáveis de Ambiente​

Definir​

#!/bin/bash
# Variável local (apenas no script)
LOCAL_VAR="local"

# Variável de ambiente (exportada)
export ENV_VAR="environment"

# Ou
ENV_VAR="environment"
export ENV_VAR

Variáveis de Sistema Comuns​

#!/bin/bash
echo "HOME: $HOME"
echo "USER: $USER"
echo "PATH: $PATH"
echo "SHELL: $SHELL"
echo "PWD: $PWD"
echo "UID: $UID"
echo "EUID: $EUID"

Modificar PATH​

#!/bin/bash
# Adicionar ao PATH
export PATH="$PATH:/chemin/vers/bin"

# Temporário (apenas no script)
PATH="$PATH:/chemin/vers/bin"

Variáveis Especiais​

Código de Retorno​

#!/bin/bash
# $?: Código de retorno do último comando
ls /tmp
echo "Código: $?" # 0 se sucesso

# Testar
if [ $? -eq 0 ]; then
echo "Sucesso"
else
echo "Falha"
fi

PID e Processos​

#!/bin/bash
echo "PID atual: $$"
echo "PID pai: $PPID"
echo "Último PID em background: $!"

Opções do Shell​

#!/bin/bash
# $-: Opções ativas
echo "Opções: $-"

Exemplo Completo​

#!/bin/bash
# Script com parâmetros e arrays

# Função de ajuda
mostrar_ajuda() {
echo "Uso: $0 [OPÇÕES] ARQUIVOS..."
echo "Opções:"
echo " -h Ajuda"
echo " -v Modo verboso"
echo " -o Arquivo de saída"
}

# Variáveis
VERBOSO=false
OUTPUT=""
ARQUIVOS=()

# Parser de argumentos
while [ $# -gt 0 ]; do
case $1 in
-h)
mostrar_ajuda
exit 0
;;
-v)
VERBOSO=true
;;
-o)
shift
OUTPUT="$1"
;;
*)
ARQUIVOS+=("$1")
;;
esac
shift
done

# Processamento
if [ ${#ARQUIVOS[@]} -eq 0 ]; then
echo "Erro: Nenhum arquivo especificado"
exit 1
fi

[ "$VERBOSO" = true ] && echo "Processando ${#ARQUIVOS[@]} arquivo(s)"

for arquivo in "${ARQUIVOS[@]}"; do
[ "$VERBOSO" = true ] && echo "Processando: $arquivo"
# Processamento...
done

Resumo​

Neste capítulo, você aprendeu:

Substituição: \${VAR:-default}, \${VAR%pattern}, etc.
Parâmetros: $0, $1-$n, $#, $@, $*
Arrays: Declaração, acesso, iteração
Ambiente: export, variáveis de sistema
Especiais: $?, $$, $PPID, $-
Parsing: while + case para argumentos


Próximos Passos​

Capítulo 6.3: Estruturas de Controle
Capítulo 6.4: Funções e Cron


Capítulo criado em: Dezembro 2024