Aula 2.2 — Scripts que leem input do usuário, processam variáveis e retornam exit codes
Variáveis são caixinhas com etiqueta que guardam valores para reutilizar ao longo do script. No Bash, não existe declaração de tipo: basta atribuir um valor com o sinal =. Para acessar o conteúdo, use o prefixo $ antes do nome.
⚠️ Regra de ouro: ❌ NOME = "João" (com espaços) causa erro — o Bash interpreta NOME como um comando. Use sempre NOME="João" sem espaços ao redor do =.
Aspas duplas (") interpretam variáveis e substituições. Aspas simples (') tratam tudo como literal.
O Bash não exige declaração de tipo, mas é importante entender como os valores são tratados dependendo do contexto em que são usados.
| Tipo | Exemplo | Observação |
|---|---|---|
| String | NOME="Alice" | Texto simples; use aspas se tiver espaços |
| Número inteiro | PORTA=8080 | Sem aspas; use $(( )) para aritmética |
| Booleano (convenção) | ATIVO="true" | Bash usa strings ou exit codes, não tipo bool nativo |
| Captura de comando | DATA=$(date) | Guarda a saída de um comando |
O Bash define variáveis automáticas que fornecem informações sobre o ambiente de execução e os argumentos recebidos pelo script.
VARIÁVEIS DE AMBIENTE
| Variável | Conteúdo |
|---|---|
$HOME | Pasta home do usuário |
$USER | Nome do usuário logado |
$PWD | Diretório atual |
$SHELL | Shell em uso |
$PATH | Caminhos de busca de comandos |
VARIÁVEIS DE SCRIPT
| Variável | Conteúdo |
|---|---|
$0 | Nome do próprio script |
$1, $2... | Argumentos posicionais |
$# | Quantidade de argumentos |
$@ | Todos os argumentos |
$? | Exit code do último comando |
$$ | PID do próprio script |
readO comando read pausa o script e aguarda que o usuário digite algo, armazenando o valor em uma variável. É a principal forma de criar scripts interativos.
read -p — prompt na mesma linharead -s — entrada silenciosa (senha)💡 Dica: combine -s e -p juntos (read -s -p "Senha: " SENHA) para pedir a senha com prompt e sem eco. Sempre adicione um echo vazio logo após para pular a linha.
export$() e backtickA substituição de comandos captura a saída de um comando e a insere no lugar. A forma moderna é $(comando); a forma antiga usa backtick (`comando`), ainda válida mas menos legível.
export e variáveis de ambientePor padrão, variáveis criadas em um script são locais a ele. O comando export torna a variável visível para processos filhos (subshells e programas iniciados pelo script).
📌 Quando usar export? Use quando um programa externo ou script filho precisar ler a variável. Variáveis sem export são invisíveis fora do script atual.
Todo comando Linux retorna um exit code (código de saída) ao terminar: 0 indica sucesso; qualquer valor entre 1 e 255 indica algum tipo de erro ou condição especial. A variável especial $? sempre guarda o exit code do último comando executado.
| Código | Significado |
|---|---|
0 | Sucesso — comando executou sem erros |
1 | Erro genérico |
2 | Uso incorreto do comando |
126 | Permissão negada (arquivo não executável) |
127 | Comando não encontrado |
130 | Processo cancelado pelo usuário (Ctrl+C) |
⚠️ Armadilha comum: $? é sobrescrito a cada comando executado. Se precisar do exit code de um comando, salve-o em uma variável imediatamente: CODIGO=$?.
Veja todos os conceitos da aula combinados em um script real que coleta dados do usuário, usa variáveis especiais, exibe resumo e sinaliza o resultado com exit code.
💡 Boas práticas: nomes de variáveis em MAIUSCULO por convenção; salve o $? imediatamente após o comando relevante; use exit 0 para indicar sucesso e exit 1 (ou outro valor) para erros.
Arraste cada descrição para o comando ou conceito correto de variáveis e interação.
NOME="João"
read -p "Digite seu nome: " NOME
echo $?
echo "Olá, $NOME!"
$#
export PATH=$PATH:/opt/bin
vim ~/scripts/cadastro.sh. Pressione i e escreva o shebang (#!/bin/bash), comentário de cabeçalho e dois read -p: um para NOME e outro para EMAIL. Salve com Esc :wq.read de cada campo, adicione uma verificação simples: [ -z "$NOME" ] && echo "ERRO: Nome obrigatório!" && exit 1 Faça o mesmo para EMAIL. Isso usa operadores de string para checar campo vazio.DATA=$(date +"%d/%m/%Y %H:%M")
echo "=== RESUMO ==="
echo "Nome: $NOME"
echo "Email: $EMAIL"
echo "Data: $DATA" Use aspas duplas para garantir a interpretação das variáveis.exit 0. Dê permissão e execute: chmod +x ~/scripts/cadastro.sh && ~/scripts/cadastro.sh. Após a execução, execute echo $? e confirme que retorna 0.NOME=$1
echo "Olá, $NOME! (via argumento $0)"
echo "Total de argumentos: $#" Execute: ./cadastro.sh "João Silva" e verifique as variáveis especiais.export APP_ENV="dev"
export LOG_DIR="$HOME/logs"
mkdir -p "$LOG_DIR"
echo "Ambiente: $APP_ENV" Verifique que printenv APP_ENV mostra o valor dentro do script e que a pasta de log foi criada.read, o mesmo script serve para dados diferentes a cada execução. Com exit codes, outros scripts e sistemas de monitoramento conseguem saber se tudo correu bem — a base da automação profissional.
Como se declara corretamente uma variável em Bash?
nome="João". Para usar: $nome ou ${nome}.Qual variável especial contém o código de saída do último comando?
$? retorna 0 se o último comando teve sucesso, ou um valor diferente em caso de erro.Qual comando lê uma entrada digitada pelo usuário e armazena em uma variável?
read variavel aguarda o usuário digitar e pressionar Enter. Use read -p "Mensagem: " var para exibir um prompt.O que representa $1 em um script Bash?
$1 é o primeiro argumento, $2 o segundo... $0 é o nome do script, $# é a quantidade de argumentos.