Como Executar um Arquivo .sh no Linux: Guia Completo para Iniciantes e Administradores de Sistema
Os scripts shell são a base da automação Linux. Quer esteja a implementar uma aplicação web, a agendar cópias de segurança ou a configurar um servidor recém-aprovisionado, os ficheiros .sh permitem-lhe agrupar sequências de comandos complexas num único executável repetível. Este guia orienta-o através de todos os métodos para executar scripts shell em Linux — desde a execução básica até processos em segundo plano e agendamento cron — com as melhores práticas que funcionam em ambientes de produção.
O que é um ficheiro .sh em Linux?
Um ficheiro .sh é um script de texto simples escrito em linguagem shell (tipicamente Bash ou POSIX sh) que o shell Linux interpreta e executa linha por linha. Os scripts shell são utilizados para:
- Automatizar tarefas repetitivas de administração de sistemas
- Implementar e configurar aplicações
- Gerir utilizadores, permissões e sistemas de ficheiros
- Agendar trabalhos de manutenção como cópias de segurança e rotação de registos
- Inicializar novos servidores após aprovisionamento
Se está a gerir um ambiente de VPS Hosting ou um Servidor Dedicado, a programação de scripts shell é uma competência indispensável que lhe poupará horas de trabalho manual todas as semanas.
Pré-requisitos
Antes de executar qualquer ficheiro .sh, certifique-se de que tem:
- Acesso a um terminal Linux (local ou via SSH)
- Uma conta de utilizador com permissões apropriadas
- O ficheiro de script já no sistema (criado localmente ou transferido via SCP/SFTP)
Método 1: Tornar o Ficheiro Executável com chmod
Por padrão, os ficheiros .sh recém-criados ou descarregados não têm permissões de execução. Antes de executar o script como um programa, deve conceder explicitamente direitos de execução utilizando o comando chmod.
chmod +x script.shPara verificar se as permissões foram aplicadas corretamente:
ls -l script.shDeverá ver um resultado semelhante a:
-rwxr-xr-x 1 user user 1024 Jun 10 14:32 script.shAs flags x confirmam que o ficheiro é agora executável pelo proprietário, grupo e outros.
> Dica de segurança: Se deseja restringir a execução apenas ao proprietário do ficheiro, utilize chmod 700 script.sh em vez de chmod +x.
Método 2: Executar o Script Utilizando um Caminho Relativo ou Absoluto
Uma vez que o ficheiro é executável, pode executá-lo diretamente a partir do terminal.
Utilizando um Caminho Relativo (Diretório Atual)
Se o script está no seu diretório de trabalho atual, prefixe-o com ./:
./script.shO ./ diz ao shell para procurar no diretório atual em vez de procurar no $PATH do sistema.
Utilizando um Caminho Absoluto
Se o script está armazenado noutro local, forneça o seu caminho completo:
/home/user/scripts/script.shou
/usr/local/bin/script.shA utilização de caminhos absolutos é especialmente importante ao executar scripts a partir de trabalhos cron ou outros contextos automatizados onde o diretório de trabalho pode ser diferente.
Método 3: Executar o Script com bash ou sh (Sem Permissão de Execução Necessária)
Pode invocar um script shell chamando explicitamente o interpretador, mesmo que o ficheiro não tenha permissões de execução. Isto é particularmente útil para testar rapidamente um script antes de o tornar permanentemente executável.
bash script.shou, para scripts compatíveis com POSIX:
sh script.shDiferença Entre bash e sh
| Comando | Interpretador | Suporta Funcionalidades Específicas do Bash |
|---|---|---|
bash script.sh | GNU Bash | Sim |
sh script.sh | POSIX sh (frequentemente dash no Ubuntu) | Não |
Se o seu script utiliza sintaxe específica do Bash como arrays, condicionais [[ ]] ou substituição de processos, utilize sempre bash em vez de sh.
Método 4: Executar o Script como Superutilizador (sudo)
Alguns scripts requerem privilégios de nível raiz para modificar ficheiros de sistema, gerir serviços, instalar pacotes ou alterar configurações de rede. Utilize sudo para elevar permissões:
sudo ./script.shou passe o script diretamente para bash com direitos elevados:
sudo bash script.shConsiderações Importantes de Segurança
- Nunca execute um script como raiz sem o ler primeiro. Um script malicioso ou mal escrito com acesso sudo pode causar danos irreversíveis ao sistema.
- Prefira executar scripts com as permissões mínimas necessárias.
- Se um script apenas precisa de escrever num diretório específico, considere ajustar as permissões do diretório em vez de executar o script inteiro como raiz.
Método 5: Executar o Script em Segundo Plano
Por padrão, executar um script no terminal bloqueia a sua sessão até que o script seja concluído. Para tarefas de longa duração — como transferências de ficheiros grandes, migrações de bases de dados ou construções de servidores — deverá enviar o processo para o segundo plano.
Utilizando o Operador &
./script.sh &O símbolo & coloca o processo em segundo plano e devolve imediatamente o controlo ao seu terminal. O shell imprime o PID (ID do Processo) do trabalho em segundo plano, que pode utilizar para monitorizar ou terminá-lo mais tarde.
Manter o Script em Execução Após Logout com nohup
Se desligar do SSH, os trabalhos em segundo plano lançados com & terminarão tipicamente. Utilize nohup para evitar isto:
nohup ./script.sh &A saída é redirecionada para nohup.out por padrão. Para especificar um ficheiro de registo personalizado:
nohup ./script.sh > /var/log/myscript.log 2>&1 &Monitorizar Trabalhos em Segundo Plano
jobs # List background jobs in the current session
ps aux | grep script.sh # Find the process by name
kill PID # Terminate a specific background processMétodo 6: Agendar Execução de Script com Cron
Para tarefas recorrentes — cópias de segurança noturnas, limpezas semanais, verificações de saúde horárias — o agendador cron incorporado do Linux é a solução padrão.
Abrir o Editor Crontab
crontab -eSintaxe Cron
* * * * * /path/to/script.sh
│ │ │ │ │
│ │ │ │ └── Day of week (0–7, Sunday = 0 or 7)
│ │ │ └──── Month (1–12)
│ │ └────── Day of month (1–31)
│ └──────── Hour (0–23)
└────────── Minute (0–59)Exemplos Práticos de Cron
| Agendamento | Expressão Cron | Caso de Uso Exemplo |
|---|---|---|
| Todos os dias às 2:00 AM | 0 2 * * * | Cópia de segurança de base de dados noturna |
| Todas as segundas-feiras às 6:00 AM | 0 6 * * 1 | Rotação de registos semanal |
| A cada hora | 0 * * * * | Verificação de monitorização de tempo de atividade |
| A cada 15 minutos | */15 * * * * | Atualização de cache |
| No reinício do sistema | @reboot | Iniciar um serviço ou script no arranque |
Exemplo: Cópia de Segurança Diária Automatizada
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1Isto executa backup.sh todos os dias às 2:00 AM e acrescenta tanto a saída padrão como os erros a um ficheiro de registo para auditoria.
> Dica profissional: Utilize sempre caminhos absolutos nas entradas cron. O Cron é executado com um ambiente mínimo e pode não ter acesso ao mesmo $PATH que a sua shell interativa.
Método 7: Obter um Script (Executar no Contexto da Shell Atual)
Existe um método de execução adicional que vale a pena conhecer: obter um script. Ao contrário dos métodos acima, obter executa o script na sessão shell atual em vez de gerar uma subshell. Isto significa que quaisquer variáveis ou funções definidas no script persistem no seu ambiente atual.
source script.shou equivalentemente:
. script.shIsto é comumente utilizado para carregar variáveis de ambiente, ativar ambientes virtuais ou aplicar alterações de configuração à sessão atual.
Resolução de Problemas de Erros Comuns
| Mensagem de Erro | Causa Provável | Solução |
|---|---|---|
Permission denied | Ficheiro sem permissão de execução | Execute chmod +x script.sh |
No such file or directory | Caminho errado ou ficheiro em falta | Verifique o caminho com ls e pwd |
bad interpreter: No such file or directory | Linha shebang errada (por exemplo, terminações de linha do Windows) | Execute dos2unix script.sh para corrigir terminações de linha |
command not found | Script não em $PATH e sem prefixo ./ | Utilize ./script.sh ou caminho absoluto completo |
syntax error near unexpected token | Script escrito para bash mas executado com sh | Utilize bash script.sh explicitamente |
Melhores Práticas para Escrever e Executar Scripts Shell
Seguir estas práticas tornará os seus scripts mais seguros, mais fáceis de manter e mais fáceis de depurar — especialmente em ambientes de servidor.
1. Sempre Comece com uma Linha Shebang
A primeira linha de cada script deve declarar o interpretador:
#!/bin/bashou para máxima portabilidade:
#!/usr/bin/env bash2. Ativar Modo Rigoroso
Adicione isto perto do topo de cada script de produção:
set -euo pipefail-e— Sair imediatamente se algum comando falhar-u— Tratar variáveis não definidas como erros-o pipefail— Capturar falhas em comandos canalizados
3. Ler o Script Antes de Executá-lo
Nunca execute um ficheiro .sh de uma fonte externa ou não confiável sem rever o seu conteúdo primeiro:
cat script.shou abra-o num editor de texto. Isto é especialmente crítico ao executar com sudo.
4. Utilizar Comentários Abundantemente
#!/bin/bash
# backup.sh — Daily backup script for /var/www
# Author: sysadmin@example.com
# Last updated: 2024-06-10
# Define source and destination directories
SOURCE="/var/www"
DEST="/mnt/backup"5. Organizar Scripts em Diretórios Dedicados
| Diretório | Uso Recomendado |
|---|---|
/usr/local/bin/ | Scripts em todo o sistema acessíveis a todos os utilizadores |
~/scripts/ ou ~/bin/ | Scripts de utilizador pessoal |
/opt/scripts/ | Scripts de automação específicos da aplicação |
/etc/cron.daily/ | Scripts para executar diariamente via cron |
6. Registar Saída de Script
Sempre redirecione a saída para um ficheiro de registo para scripts executados sem supervisão:
./script.sh >> /var/log/script.log 2>&17. Testar Scripts num Ambiente Seguro Primeiro
Antes de implementar um script num servidor de produção, teste-o num ambiente de teste ou numa instância VPS descartável onde os erros não causarão tempo de inatividade.
Executar Scripts Shell num Servidor Linux: Considerações Práticas
Ao executar scripts num servidor Linux remoto — quer seja um ambiente partilhado ou uma máquina dedicada — alguns fatores adicionais entram em jogo:
- Acesso SSH: A maioria da programação de scripts do lado do servidor acontece sobre SSH. Ferramentas como
screenoutmuxpermitem-lhe manter sessões persistentes para que scripts de longa duração sobrevivam a desconexões. - Permissões de utilizador: Em ambientes de alojamento partilhado, a sua capacidade de executar scripts pode ser limitada. Um VPS com cPanel oferece-lhe acesso raiz completo e controlo total sobre a execução de scripts.
- Implementações automatizadas: Combine scripts shell com trabalhos cron para automatizar implementações, renovações de certificados (especialmente útil juntamente com Certificados SSL) e tarefas de manutenção rotineira.
