← Voltar ao Encontro 13
Sistemas Operacionais · ADS23
01 / 14
Encontro 13 de 17

Shell script:
variáveis, decisões
e funções

Onde os comandos soltos do encontro passado viram uma ferramenta que trabalha por você — repetidamente, sem supervisão e sem erro humano.

ADS23IFCE Campus HorizonteProf. José Stelio Sampaio Bastos Neto
↓ role pra avançar · use os pontos à direita pra navegar direto
De onde viemos

Do comando digitado ao programa que roda sozinho

Encontro 12

Comandos, um de cada vez

Você digita, o shell executa, você lê o resultado e decide o próximo. Poderoso — mas exige você ali, presente.

Hoje

Comandos que decidem sozinhos

Um arquivo com a sequência, mais variáveis, condições e repetição. Roda de madrugada, sem ninguém olhando.

Este encontro é a base direta do projeto final, que será lançado no próximo.

Pergunta pra turma

Todo dia, às 3h da manhã,
alguém precisa checar o disco,
limpar logs antigos e avisar a equipe.
Quem faz isso?

Ninguém acorda às 3h. E ninguém deveria precisar.

O mínimo para começar

Um script é um arquivo de texto com três requisitos

É só isso. Nada de compilar, nada de instalar. O shell que vocês já usam é o interpretador.

Guardando informação

Variáveis: atribuir sem espaços, usar com cifrão

A sintaxe é enxuta e tem uma pegadinha que derruba todo iniciante: não pode haver espaço em volta do sinal de igual.

FormaEfeito
NOME="valor"Correto — atribui o valor à variável
NOME = "valor"Erro — o shell tenta executar um comando chamado NOME
echo $NOMEUsa o valor da variável
echo "${NOME}_backup"Chaves delimitam o nome — necessário ao colar texto junto
DATA=$(date +%F)Guarda a saída de um comando dentro da variável

A última linha é a mais útil de todas: é assim que um script captura o resultado de um comando para decidir o que fazer com ele.

Tomando decisões

Condicionais: o script escolhe o caminho

A estrutura if permite que o script reaja ao que encontrou — em vez de executar cegamente a mesma coisa sempre.

if [ condição ]; then
   comandos se verdadeiro
else
   comandos se falso
fi
TesteVerifica
-f arquivoO arquivo existe?
-d diretorioO diretório existe?
-z "$VAR"A variável está vazia?
"$A" -gt "$B"A é maior que B? (números)
A regra que evita a maioria dos bugs

Sempre use aspas em volta das variáveis

Se uma variável estiver vazia ou contiver espaços, o shell a expande de forma inesperada e a condição quebra — ou pior, o comando age sobre o alvo errado.

Sem aspas — frágil

if [ $NOME = "joao" ] — se $NOME estiver vazio, a linha vira if [ = "joao" ] e dá erro de sintaxe.

Com aspas — seguro

if [ "$NOME" = "joao" ] — mesmo vazia, vira if [ "" = "joao" ], que é falso e não quebra nada.

Vale para nomes de arquivo também: rm $ARQUIVO com espaços no nome apaga coisa errada; rm "$ARQUIVO" não.

Repetindo

Laços: o mesmo tratamento para muitos itens

Aqui o script finalmente supera o coringa do Encontro 12: em vez de aplicar um comando a muitos arquivos, ele aplica uma sequência inteira de decisões a cada um.

for

Percorre uma lista conhecida

Arquivos de um diretório, uma faixa de números, itens de uma variável. É o laço mais usado em automação.

while

Repete enquanto a condição valer

Usado para ler um arquivo linha a linha ou aguardar até que algo aconteça.

Combinado com if, o for resolve tarefas como "para cada log com mais de 7 dias, compacte e mova para o arquivo morto".

Organizando

Funções: dar nome a um bloco que se repete

Quando o mesmo trecho aparece em vários pontos do script, vira função. O ganho não é só escrever menos — é ter um só lugar para corrigir quando algo mudar.

log() {
   echo "[$(date +%T)] $1" >> /var/log/meu.log
}
log "backup iniciado"   ← chama a função com um argumento

Dentro da função, $1 é o primeiro argumento recebido, $2 o segundo, e assim por diante — a mesma convenção que vale para os argumentos do próprio script.

Saber se deu certo

Código de saída: como um script conversa com outro

Todo comando devolve um número ao terminar: 0 significa sucesso, qualquer outro valor significa erro. É assim que scripts encadeiam decisões de forma confiável.

ConstruçãoSignificado
$?Código de saída do último comando executado
cmd1 && cmd2Executa cmd2 só se cmd1 deu certo
cmd1 || cmd2Executa cmd2 só se cmd1 falhou
exit 1Encerra o script sinalizando erro a quem o chamou

Vocês já usaram && desde o Encontro 5 sem saber que era isso — agora dá pra usar de propósito.

Eixo do curso

Script + container: a dupla que sustenta o projeto final

Um script pode orquestrar containers como orquestra qualquer outro comando — e é exatamente isso que o toolkit do projeto final vai fazer.

Script controla container

Subir, verificar, derrubar

docker run, docker ps e docker stop dentro de um if — o script decide conforme o estado real.

Script roda dentro do container

Empacotado junto com a imagem

O Dockerfile copia o script para dentro da imagem, como vocês já fizeram no Encontro 4.

No próximo encontro isso vira o projeto final: um toolkit de deploy, backup e monitoramento sobre container.

Prévia da prática

Um script de monitoramento de verdade

Variável, captura da saída de um comando, condição e alerta — tudo que vocês vão escrever hoje, num exemplo só.

Este script é essencialmente o que vocês vão construir passo a passo no roteiro de hoje.

Mão na massa

Do "olá mundo" ao monitor de disco

FUNDAMENTOS

Script, variáveis, condição, laço

Construção incremental: cada passo acrescenta uma peça ao mesmo script.

REFORÇO DOCKER

Script que controla container

Um script que verifica se o container está no ar e o sobe se não estiver.

O roteiro de laboratório detalha os passos, com dicas se algo travar.

Para ler

Leitura da semana

🟢

O roteiro de laboratório deste encontro

Atenção: nenhum dos dois livros-base cobre shell script. Por isso, nesta semana o próprio roteiro de laboratório é a leitura obrigatória — leia-o por inteiro, não só os comandos.

⚪

Bibliografia complementar do PUD

NEGUS & BRESNAHAN, Linux: a Bíblia (capítulo de shell scripts); MENDONÇA & ARAÚJO, Shell Linux. Para quem quiser se aprofundar além do roteiro.

O quiz da semana cobra o conteúdo do roteiro e recolhe suas observações da prática — tudo no mesmo instrumento.