Se você achava que Shell Script era uma linguagem feita pra invocar o Cthulhu do terminal... bom, você não está totalmente errado. Mas também não está sozinho. Vamos simplificar a coisa toda, com explicações, exemplos, boas práticas e um pouco de humor.
Estrutura básica
#!/bin/bash
# Comentário explicativo
echo "Olá, mundo!"
Diferença entre ${variavel}
e $(comando)
${variavel}
– Interpolação de variáveis
Usado para acessar o valor de uma variável.
nome="Fulano"
echo "Bem-vindo, ${nome}"
Use as chaves para evitar ambiguidade com o restante do texto:
echo "Arquivo: ${nome}_2025.txt"
Sem as chaves, o shell pode entender que a variável se chama nome_2025
.
$(comando)
– Substituição de comando
Executa o comando e insere o resultado.
data=$(date)
echo "Hoje é $data"
Você também pode usar a forma antiga com crase:
data=`date`
Funciona, mas é menos legível e mais difícil de aninhar.
Comandos Shell úteis e frequentes
Comando | O que faz | Exemplo | |
---|---|---|---|
echo | Imprime no terminal | echo "Oi" | |
read | Lê entrada do usuário | read nome | |
cd | Muda de diretório | cd /tmp | |
pwd | Mostra o diretório atual | pwd | |
ls | Lista arquivos | ls -la | |
mkdir | Cria diretório | mkdir pasta | |
rm | Remove arquivos ou pastas | rm arquivo.txt | |
cp | Copia arquivos | cp a.txt b.txt | |
mv | Move ou renomeia arquivos | mv a.txt b.txt | |
cat | Mostra o conteúdo de um arquivo | cat arquivo.txt | |
grep | Filtra texto | grep "erro" log.txt | |
cut | Corta colunas de texto | cut -d':' -f1 | |
awk | Manipula texto em colunas | awk '{print $1}' | |
sed | Faz substituições em texto | sed 's/teste/sucesso/g' | |
chmod | Muda permissões de arquivos | chmod +x script.sh | |
find | Procura arquivos | find . -name "*.txt" | |
xargs | Passa argumentos da entrada para comando | `ls | xargs rm` |
basename | Remove caminho e extensão | basename /caminho/arq | |
dirname | Retorna o diretório de um caminho | dirname /caminho/arq |
Sobre indentação: seja humano, não gremlin
Shell Script não exige indentação... mas seu futuro eu exige.
Código sem indentação:
if [ "$x" = "1" ]; then echo "oi"; else echo "tchau"; fi
Código legível:
if [ "$x" = "1" ]; then
echo "oi"
else
echo "tchau"
fi
Boas práticas para não virar um "Script Monster"
1. Use set -euo pipefail
Logo após o #!/bin/bash
, adicione:
set -euo pipefail
-e
: para o script se qualquer comando falhar-u
: erro ao usar variável não definida-o pipefail
: captura falha em comandos encadeados com|
2. Use funções
Evite repetir código:
fazer_backup() {
echo "Fazendo backup..."
cp arquivo.txt backup/
}
3. Sempre use aspas em variáveis
echo "$arquivo" # Correto
echo $arquivo # Pode falhar com espaços ou caracteres especiais
4. Verifique se arquivos existem
if [ -f "$arquivo" ]; then
echo "Arquivo encontrado!"
fi
5. Nomeie suas variáveis com clareza
Evite:
a=10
b=20
Prefira:
quantidade_usuarios=10
limite=20
Dica bônus: use ShellCheck
Use o https://www.shellcheck.net/ para revisar seus scripts.
Ele detecta erros, más práticas e possíveis falhas de segurança.
E o que NÃO fazer
#!/bin/bash
rm -rf /
Se você rodar isso, nem o backup vai querer falar com você.
Shell Script parece intimidador no começo, mas com um pouco de prática, organização e atenção aos detalhes, você pode escrever scripts robustos, legíveis e reutilizáveis. Com variáveis bem usadas, indentação clara, comandos úteis e algumas boas práticas, até o terminal vai te respeitar.
Comente ai qualquer duvida e complemente o post se achar importante.
Bons estudos.
Obrigado. :)