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