3.3 — Transformando comandos em scriptsTópico 3: As maravilhas da linha de comandopeso 4
O que você precisa entender
Um script é só uma sequência de comandos salva num arquivo, que o shell executa de cima pra baixo. A prova cobra o básico de shell scripting: variáveis, condicionais, loops e permissão de execução.
Estrutura mínima de um script
#!/bin/bash
# A primeira linha é o "shebang" — diz qual interpretador usar
echo "Olá, mundo!"
Pra rodar: precisa de permissão de execução (chmod +x script.sh) e então ./script.sh, ou rodar direto com bash script.sh (sem precisar de permissão nesse caso).
Variáveis
nome="Mundo"
echo "Olá, $nome" # usa $ pra ler o valor
echo "Olá, ${nome}!" # chaves ajudam a delimitar o nome da variável
Argumentos do script
#!/bin/bash
echo "Nome do script: $0"
echo "Primeiro argumento: $1"
echo "Segundo argumento: $2"
echo "Todos os argumentos: $@"
echo "Quantidade de argumentos: $#"
Condicionais (if)
#!/bin/bash
if [ -f "/etc/passwd" ]; then
echo "O arquivo existe"
else
echo "O arquivo não existe"
fi
Testes comuns dentro de [ ]:
| Teste | Verifica |
|---|---|
-f arquivo |
É um arquivo comum? |
-d pasta |
É um diretório? |
-e caminho |
Existe (arquivo ou pasta)? |
-z string |
String está vazia? |
"$a" = "$b" |
Strings são iguais? |
$a -eq $b |
Números são iguais? |
$a -gt $b |
Número a é maior que b? |
Loops
# for: repete para cada item de uma lista
for arquivo in *.txt; do
echo "Encontrado: $arquivo"
done
# while: repete enquanto a condição for verdadeira
contador=1
while [ $contador -le 5 ]; do
echo "Contagem: $contador"
contador=$((contador + 1))
done
Exit status (código de saída) — cai na prova
Todo comando retorna um código: 0 = sucesso, qualquer outro número = erro.
ls /etc
echo $? # mostra o código de saída do último comando (0 = ok)
comando_que_nao_existe
echo $? # normalmente 127 (comando não encontrado)
Comandos para testar (monte esses scripts de verdade)
# 1. Criar e dar permissão de execução a um script
echo -e '#!/bin/bash\necho "Funcionou!"' > meuscript.sh
chmod +x meuscript.sh
./meuscript.sh
# 2. Script que recebe argumento
echo -e '#!/bin/bash\necho "Você digitou: $1"' > argumento.sh
chmod +x argumento.sh
./argumento.sh teste
# 3. Ver o código de saída do último comando
ls /pasta-que-nao-existe
echo $?
# 4. Loop simples direto no terminal
for i in 1 2 3; do echo "Número $i"; done
# 5. Verificar se um arquivo existe antes de agir
[ -f ~/.bashrc ] && echo "Existe!" || echo "Não existe"
📌 Exercício prático
Crie um script chamado backup-simples.sh que: (1) receba o nome de uma pasta como argumento ($1), (2) verifique com if [ -d "$1" ] se a pasta existe, (3) se existir, compacte ela com tar -czvf num arquivo .tar.gz com a data no nome (dica: data=$(date +%Y%m%d)), (4) se não existir, mostre uma mensagem de erro. Dê permissão de execução e teste com uma pasta real.