Prévia do material em texto
<p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>50 Exemplos práticos de Shell</p><p>Script para automatizar sistemas</p><p>Automatize seus sistemas e aumente sua eficiência com Shell</p><p>Script</p><p>Pedro Delfino - e-tinet.com - 1</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>1. Verificar se um arquivo existe 4</p><p>2. Criar um diretório se ele não existir 7</p><p>3. Criar um backup de um arquivo 10</p><p>4. Exibir o número de linhas em um arquivo 14</p><p>5. Listar todos os arquivos em um diretório 17</p><p>6. Renomear arquivos em um diretório 20</p><p>7. Remover arquivos com mais de um mês de idade 24</p><p>8. Converter todos os arquivos de um diretório de um</p><p>formato para outro usando o programa ffmpeg 29</p><p>9. Fazer backup de um diretório em outro local usando o</p><p>comando rsync 33</p><p>10. Extrair o texto de um arquivo PDF usando o programa</p><p>pdftotext 36</p><p>11. Renomear vários arquivos em um diretório 38</p><p>12.Compactar arquivos em um diretório 41</p><p>13.Descompactar um arquivo em um diretório 43</p><p>14. Verifica se o arquivo a ser deletado existe antes de</p><p>tentar excluí-lo 45</p><p>15.Verifica se o diretório a ser criado já existe antes de</p><p>tentar criá-lo 48</p><p>16. Verifica o uso de CPU e memória 51</p><p>17.Gerar um relatório do espaço em disco 54</p><p>18. Verificar log de erros 57</p><p>19.Script Bash para monitorar serviços 60</p><p>20. Bash para instalar pacotes automaticamente 64</p><p>21.Gerenciar arquivos duplicados 68</p><p>22. Gerenciar múltiplos usuários 72</p><p>23. Verificação de integridade de arquivos 75</p><p>24. Verificar as permissões de arquivos 79</p><p>25. Configuração automática de rede 82</p><p>26. Realizar ações com base em conteúdo de arquivos de</p><p>log 85</p><p>27. Cria uma lista de diretórios de backup com base em</p><p>datas. 89</p><p>28. Verifica se um arquivo está vazio e toma medidas</p><p>apropriadas 92</p><p>29. Transforma texto em caixa alta ou caixa baixa 94</p><p>30. Analisar e classificar dados em arquivos CSV 97</p><p>Pedro Delfino - e-tinet.com - 2</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>31.Verificar se um serviço está em execução e notificar se</p><p>ele não estiver 101</p><p>32. Enviar uma notificação por e-mail 103</p><p>33. Verificar a conectividade com hosts remotos 107</p><p>34. Modificar as permissões de um arquivo ou diretório</p><p>109</p><p>35. Analisar o uso de CPU e memória de processos</p><p>específicos 111</p><p>36. Backup remoto de arquivos de servidor para servidor</p><p>114</p><p>37. Analisar logs em tempo real para alertar sobre</p><p>eventos importantes 117</p><p>38. Verificar a disponibilidade de sites e serviços da Web</p><p>120</p><p>39. Executar comandos com privilégios de root 123</p><p>40. Verificar se há atualizações de segurança no debian</p><p>125</p><p>41. Verificar se há atualizações de segurança disponíveis</p><p>e instalá-las automaticamente no debian 127</p><p>42. Copiar arquivos grandes de forma eficiente usando o</p><p>rsync 130</p><p>43. Enviar alertas em caso de uso excessivo de largura de</p><p>banda em uma rede 132</p><p>44. Criar uma lista de arquivos e pastas em um diretório</p><p>com base em datas de modificação 134</p><p>45. Monitorar a disponibilidade de serviços e reiniciá-los</p><p>se necessário 137</p><p>46. Converter arquivos de imagem em vários formatos140</p><p>47. Automatizar o processo de criação de usuários no</p><p>sistema 143</p><p>48. Verificar se há atualizações de software disponíveis e</p><p>notificar automaticamente 146</p><p>49. Realizar o backup de configurações do sistema 149</p><p>50. Automatizar a instalação de softwares em sistemas</p><p>recém-instalados 152</p><p>51.Automatizar a instalação do sistema LAMP no LINUX 155</p><p>Pedro Delfino - e-tinet.com - 3</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Verificar se um arquivo existe</p><p>#!/bin/bash</p><p># Define o caminho do arquivo a ser verificado</p><p>caminho_do_arquivo="caminho/para/arquivo.txt"</p><p># Verifica se o arquivo existe</p><p>if [ -e "$caminho_do_arquivo" ]; then</p><p>echo "O arquivo $caminho_do_arquivo existe."</p><p>else</p><p>echo "O arquivo $caminho_do_arquivo não existe."</p><p>fi</p><p>Esse script começa definindo o caminho do arquivo a ser</p><p>verificado. Em seguida, usa uma estrutura condicional if para</p><p>verificar se o arquivo existe. O operador -e é usado para verificar</p><p>se o arquivo existe e retorna um valor verdadeiro se o arquivo</p><p>existir. Se o arquivo existir, o script exibe uma mensagem</p><p>indicando que o arquivo existe. Caso contrário, o script exibe</p><p>uma mensagem indicando que o arquivo não existe.</p><p>#!/bin/bash</p><p># Define o caminho do arquivo a ser verificado</p><p>Pedro Delfino - e-tinet.com - 4</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>caminho_do_arquivo="caminho/para/arquivo.txt"</p><p>A primeira linha #!/bin/bash define o interpretador a ser</p><p>utilizado, neste caso, o bash.</p><p>A segunda linha é um comentário que define o caminho do</p><p>arquivo que será verificado. Isso permite que o usuário</p><p>especifique o caminho do arquivo a ser verificado. Por exemplo,</p><p>"caminho/para/arquivo.txt".</p><p># Verifica se o arquivo existe</p><p>if [ -e "$caminho_do_arquivo" ]; then</p><p>Essa linha é um comentário que indica que a verificação do</p><p>arquivo começa.</p><p>A linha if [ -e "$caminho_do_arquivo" ]; then é a estrutura</p><p>condicional if em que a condição é verificar se o arquivo existe.</p><p>O operador -e é usado para verificar se o arquivo existe. Se o</p><p>arquivo existir, a condição será verdadeira e o bloco de código</p><p>dentro do if será executado.</p><p>Pedro Delfino - e-tinet.com - 5</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>echo "O arquivo $caminho_do_arquivo existe."</p><p>else</p><p>echo "O arquivo $caminho_do_arquivo não existe."</p><p>fi</p><p>Se a condição do if for verdadeira, a linha echo "O arquivo</p><p>$caminho_do_arquivo existe." será executada, o que exibirá uma</p><p>mensagem indicando que o arquivo existe.</p><p>Caso contrário, a linha echo "O arquivo $caminho_do_arquivo</p><p>não existe." será executada, o que exibirá uma mensagem</p><p>indicando que o arquivo não existe.</p><p>A linha fi indica o fim da estrutura condicional if.</p><p>Pedro Delfino - e-tinet.com - 6</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Criar um diretório se ele não</p><p>existir</p><p>#!/bin/bash</p><p># Define o caminho do diretório a ser criado</p><p>caminho_do_diretorio="caminho/para/diretorio"</p><p># Verifica se o diretório já existe</p><p>if [ ! -d "$caminho_do_diretorio" ]; then</p><p># Cria o diretório se ele não existir</p><p>mkdir -p "$caminho_do_diretorio"</p><p>echo "Diretório criado em $caminho_do_diretorio"</p><p>else</p><p>echo "O diretório $caminho_do_diretorio já existe"</p><p>fi</p><p>Esse script começa definindo o caminho do diretório a ser</p><p>criado. Em seguida, usa uma estrutura condicional if para</p><p>verificar se o diretório já existe. Se o diretório não existir, o script</p><p>cria o diretório usando o comando mkdir -p, que cria o diretório</p><p>e também os diretórios pai necessários. O script exibe uma</p><p>mensagem indicando que o diretório foi criado.</p><p>Caso contrário, se o diretório já existir, o script exibe uma</p><p>mensagem indicando que o diretório já existe.</p><p>Pedro Delfino - e-tinet.com - 7</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p># Define o caminho do diretório a ser criado</p><p>caminho_do_diretorio="caminho/para/diretorio"</p><p>A segunda linha é um comentário que define o caminho do</p><p>diretório que será criado. Isso permite que o usuário especifique</p><p>o caminho do diretório a ser criado. Por exemplo,</p><p>"caminho/para/diretorio".</p><p># Verifica se o diretório já existe</p><p>if [ ! -d "$caminho_do_diretorio" ]; then</p><p>Essa linha é um comentário que indica que a verificação do</p><p>diretório começa.</p><p>A linha if [ ! -d "$caminho_do_diretorio" ]; then é a estrutura</p><p>condicional if em que a condição é verificar se o diretório já</p><p>existe. O operador -d é usado para verificar</p><p>Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>if [ $? -eq 0 ]; then</p><p>echo "Integridade de arquivos OK."</p><p>else</p><p>echo "Integridade de arquivos comprometida."</p><p>fi</p><p># Remove o arquivo de checksum calculado</p><p>rm checksum_calculado.md5</p><p>Aqui está a explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Diretório a ser verificado</p><p>DIR="/path/to/directory"</p><p># Arquivo de checksum</p><p>CHECKSUM_FILE="checksum.md5"</p><p># Verifica se o diretório existe</p><p>if [ ! -d $DIR ]; then</p><p>echo "O diretório $DIR não existe."</p><p>exit 1</p><p>fi</p><p># Verifica se o arquivo de checksum existe</p><p>if [ ! -f $DIR/$CHECKSUM_FILE ]; then</p><p>echo "O arquivo de checksum $CHECKSUM_FILE não existe</p><p>no diretório $DIR."</p><p>exit 1</p><p>fi</p><p>Pedro Delfino - e-tinet.com - 76</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Essa parte do script define o diretório a ser verificado e o nome</p><p>do arquivo de checksum, e verifica se o diretório e o arquivo de</p><p>checksum existem.</p><p># Calcula o checksum dos arquivos no diretório</p><p>echo "Calculando checksum dos arquivos no diretório</p><p>$DIR..."</p><p>cd $DIR</p><p>find . -type f -exec md5sum {} \; ></p><p>checksum_calculado.md5</p><p>Essa parte do script calcula o checksum dos arquivos no</p><p>diretório usando o comando find e md5sum, e salva o resultado</p><p>em um arquivo temporário chamado checksum_calculado.md5.</p><p># Compara os checksums</p><p>echo "Comparando checksums..."</p><p>diff -q $CHECKSUM_FILE checksum_calculado.md5</p><p>if [ $? -eq 0 ]; then</p><p>echo "Integridade de arquivos OK."</p><p>else</p><p>echo "Integridade de arquivos comprometida."</p><p>fi</p><p>Essa parte do script compara o arquivo de checksum original</p><p>com o arquivo temporário checksum_calculado.md5. Se os</p><p>checksums forem iguais, a integridade dos arquivos é</p><p>considerada OK. Caso contrário, a integridade dos arquivos é</p><p>considerada comprometida.</p><p>Pedro Delfino - e-tinet.com - 77</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p># Remove o arquivo de checksum calculado</p><p>rm checksum_calculado.md5</p><p>Essa parte do script remove o arquivo temporário</p><p>checksum_calculado.md5.</p><p>Pedro Delfino - e-tinet.com - 78</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Verificar as permissões de</p><p>arquivos</p><p>#!/bin/bash</p><p># Diretório a ser verificado</p><p>DIR="/path/to/directory"</p><p># Verifica se o diretório existe</p><p>if [ ! -d $DIR ]; then</p><p>echo "O diretório $DIR não existe."</p><p>exit 1</p><p>fi</p><p># Verifica as permissões de arquivos no diretório</p><p>echo "Verificando permissões de arquivos no diretório</p><p>$DIR..."</p><p>cd $DIR</p><p>find . -type f -print0 | while read -d $'\0' file</p><p>do</p><p>permissions=$(stat -c '%a' $file)</p><p>echo "Permissões do arquivo $file: $permissions"</p><p>done</p><p>Aqui está a explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Diretório a ser verificado</p><p>DIR="/path/to/directory"</p><p>Pedro Delfino - e-tinet.com - 79</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p># Verifica se o diretório existe</p><p>if [ ! -d $DIR ]; then</p><p>echo "O diretório $DIR não existe."</p><p>exit 1</p><p>fi</p><p>Essa parte do script define o diretório a ser verificado</p><p>e verifica se ele existe.</p><p># Verifica as permissões de arquivos no diretório</p><p>echo "Verificando permissões de arquivos no diretório</p><p>$DIR..."</p><p>cd $DIR</p><p>find . -type f -print0 | while read -d $'\0' file</p><p>do</p><p>permissions=$(stat -c '%a' $file)</p><p>echo "Permissões do arquivo $file: $permissions"</p><p>done</p><p>Essa parte do script usa o comando find para encontrar todos os</p><p>arquivos no diretório e subdiretórios, e o comando stat para</p><p>obter as permissões de cada arquivo. O resultado é impresso na</p><p>tela para que o usuário possa verificar as permissões dos</p><p>arquivos.</p><p>Note que o comando while read -d $'\0' file é usado para lidar</p><p>com nomes de arquivos que contêm espaços em branco ou</p><p>outros caracteres especiais. O parâmetro -print0 do comando</p><p>find é usado para separar os nomes de arquivos por caracteres</p><p>nulos, e o parâmetro -d $'\0' do comando read é usado para ler</p><p>os nomes de arquivos separados por caracteres nulos.</p><p>Pedro Delfino - e-tinet.com - 80</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Esse script pode ser facilmente adaptado para verificar as</p><p>permissões de outros tipos de arquivos, como diretórios ou links</p><p>simbólicos, basta alterar o parâmetro -type do comando find e o</p><p>parâmetro stat -c '%a' para o tipo de arquivo desejado.</p><p>Pedro Delfino - e-tinet.com - 81</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Configuração automática de</p><p>rede</p><p>#!/bin/bash</p><p># Configuração de rede estática</p><p>IP_ADDRESS="192.168.0.100"</p><p>NETMASK="255.255.255.0"</p><p>GATEWAY="192.168.0.1"</p><p>DNS_SERVER="8.8.8.8"</p><p># Verifica se o usuário é root</p><p>if [ "$EUID" -ne 0 ]; then</p><p>echo "Este script precisa ser executado como root."</p><p>exit 1</p><p>fi</p><p># Configura a interface de rede</p><p>echo "Configurando a interface de rede..."</p><p>ip addr add $IP_ADDRESS/$NETMASK dev eth0</p><p>ip route add default via $GATEWAY</p><p>echo "nameserver $DNS_SERVER" > /etc/resolv.conf</p><p># Verifica a configuração de rede</p><p>echo "Verificando a configuração de rede..."</p><p>ip addr show eth0</p><p>ip route show</p><p>cat /etc/resolv.conf</p><p>Aqui está a explicação linha a linha do script:</p><p>#!/bin/bash</p><p>Pedro Delfino - e-tinet.com - 82</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p># Configuração de rede estática</p><p>IP_ADDRESS="192.168.0.100"</p><p>NETMASK="24"</p><p>GATEWAY="192.168.0.1"</p><p>DNS_SERVER="8.8.8.8"</p><p>Essa parte do script define as configurações de rede estática</p><p>que serão aplicadas.</p><p># Verifica se o usuário é root</p><p>if [ "$EUID" -ne 0 ]; then</p><p>echo "Este script precisa ser executado como root."</p><p>exit 1</p><p>fi</p><p>Essa parte do script verifica se o usuário é root, pois a</p><p>configuração de rede requer privilégios de root.</p><p># Configura a interface de rede</p><p>echo "Configurando a interface de rede..."</p><p>ip addr add $IP_ADDRESS/$NETMASK dev eth0</p><p>ip route add default via $GATEWAY</p><p>echo "nameserver $DNS_SERVER" > /etc/resolv.conf</p><p>Essa parte do script configura a interface de rede com as</p><p>configurações definidas acima, utilizando o comando ip addr</p><p>add para configurar o endereço IP e a máscara de sub-rede e o</p><p>comando ip route add para configurar a rota padrão para o</p><p>Pedro Delfino - e-tinet.com - 83</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>gateway. O comando echo é usado para configurar o servidor</p><p>DNS no arquivo /etc/resolv.conf.</p><p># Verifica a configuração de rede</p><p>echo "Verificando a configuração de rede..."</p><p>ip addr show eth0</p><p>ip route show</p><p>cat /etc/resolv.conf</p><p>Essa parte do script verifica a configuração de rede, imprimindo</p><p>as informações da interface de rede e as rotas configuradas para</p><p>a rede, além do conteúdo do arquivo /etc/resolv.conf para</p><p>verificar se as configurações foram aplicadas corretamente.</p><p>Note que este script configura a interface de rede eth0. Se a</p><p>interface de rede em uso for diferente, é necessário substituir</p><p>eth0 pelo nome da interface de rede correta. Além disso, é</p><p>possível modificar as configurações de rede de acordo com as</p><p>necessidades do usuário.</p><p>Pedro Delfino - e-tinet.com - 84</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Realizar ações com base em</p><p>conteúdo de arquivos de log</p><p>#!/bin/bash</p><p># Define o arquivo de log</p><p>LOG_FILE="/var/log/syslog"</p><p># Verifica se o arquivo de log existe</p><p>if [ ! -f "$LOG_FILE" ]; then</p><p>echo "Arquivo de log não encontrado: $LOG_FILE"</p><p>exit 1</p><p>fi</p><p># Verifica se o usuário</p><p>é root</p><p>if [ "$EUID" -ne 0 ]; then</p><p>echo "Este script precisa ser executado como root."</p><p>exit 1</p><p>fi</p><p># Procura por erros no arquivo de log</p><p>echo "Procurando por erros no arquivo de log..."</p><p>if grep -q "error" "$LOG_FILE"; then</p><p>echo "Erro encontrado no arquivo de log."</p><p># Insira aqui a ação que deve ser realizada em caso</p><p>de erro</p><p>else</p><p>echo "Nenhum erro encontrado no arquivo de log."</p><p>fi</p><p># Procura por avisos no arquivo de log</p><p>echo "Procurando por avisos no arquivo de log..."</p><p>if grep -q "warning" "$LOG_FILE"; then</p><p>echo "Aviso encontrado no arquivo de log."</p><p>Pedro Delfino - e-tinet.com - 85</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p># Insira aqui a ação que deve ser realizada em caso</p><p>de aviso</p><p>else</p><p>echo "Nenhum aviso encontrado no arquivo de log."</p><p>fi</p><p>Aqui está a explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Define o arquivo de log</p><p>LOG_FILE="/var/log/syslog"</p><p>Essa parte do script define o arquivo de log que será verificado.</p><p># Verifica se o arquivo de log existe</p><p>if [ ! -f "$LOG_FILE" ]; then</p><p>echo "Arquivo de log não encontrado: $LOG_FILE"</p><p>exit 1</p><p>fi</p><p>Essa parte do script verifica se o arquivo de log existe. Se o</p><p>arquivo de log não existir, o script imprime uma mensagem de</p><p>erro e sai.</p><p># Verifica se o usuário é root</p><p>if [ "$EUID" -ne 0 ]; then</p><p>echo "Este script precisa ser executado como root."</p><p>Pedro Delfino - e-tinet.com - 86</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>exit 1</p><p>fi</p><p>Essa parte do script verifica se o usuário é root, pois a verificação</p><p>do arquivo de log pode requerer privilégios de root.</p><p># Procura por erros no arquivo de log</p><p>echo "Procurando por erros no arquivo de log..."</p><p>if grep -q "error" "$LOG_FILE"; then</p><p>echo "Erro encontrado no arquivo de log."</p><p># Insira aqui a ação que deve ser realizada em caso</p><p>de erro</p><p>else</p><p>echo "Nenhum erro encontrado no arquivo de log."</p><p>fi</p><p>Essa parte do script procura por erros no arquivo de log</p><p>utilizando o comando grep. Se um erro for encontrado, o script</p><p>imprime uma mensagem e realiza uma ação, que deve ser</p><p>definida pelo usuário. Se nenhum erro for encontrado, o script</p><p>imprime uma mensagem informando que nenhum erro foi</p><p>encontrado.</p><p># Procura por avisos no arquivo de log</p><p>echo "Procurando por avisos no arquivo de log..."</p><p>if grep -q "warning" "$LOG_FILE"; then</p><p>Pedro Delfino - e-tinet.com - 87</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>echo "Aviso encontrado no arquivo de log."</p><p># Insira aqui a ação que deve ser realizada em caso</p><p>de aviso</p><p>else</p><p>echo "Nenhum aviso encontrado no arquivo de log."</p><p>fi</p><p>Essa parte do script procura por avisos no arquivo de log</p><p>utilizando o comando grep.</p><p>echo "Aviso encontrado no arquivo de log."</p><p># Insira aqui a ação que deve ser realizada em caso</p><p>de aviso</p><p>else</p><p>echo "Nenhum aviso encontrado no arquivo de log."</p><p>fi</p><p>Assim como a parte anterior, essa parte do script procura por</p><p>avisos no arquivo de log utilizando o comando grep. Se um aviso</p><p>for encontrado, o script imprime uma mensagem e realiza uma</p><p>ação, que deve ser definida pelo usuário. Se nenhum aviso for</p><p>encontrado, o script imprime uma mensagem informando que</p><p>nenhum aviso foi encontrado.</p><p>Pedro Delfino - e-tinet.com - 88</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Cria uma lista de diretórios de</p><p>backup com base em datas.</p><p>#!/bin/bash</p><p># Este script cria uma lista de diretórios de backup com</p><p>base em datas.</p><p># Define a pasta onde os backups serão armazenados.</p><p>backup_dir="/path/to/backup/folder"</p><p># Define o formato da data para ser utilizado nos nomes</p><p>dos diretórios.</p><p>date_format="%Y-%m-%d_%H-%M-%S"</p><p># Cria o diretório de backup se ainda não existir.</p><p>if [ ! -d "$backup_dir" ]; then</p><p>mkdir -p "$backup_dir"</p><p>fi</p><p># Cria uma pasta com a data atual para armazenar o</p><p>backup.</p><p>backup_dir="$backup_dir/$(date +$date_format)"</p><p>mkdir "$backup_dir"</p><p># Cria um arquivo com a lista de diretórios de backup</p><p>existentes.</p><p>ls -d "$backup_dir"*/ > "$backup_dir/list.txt"</p><p>Explicação linha a linha:</p><p>#!/bin/bash</p><p># Este script cria uma lista de diretórios de backup com</p><p>Pedro Delfino - e-tinet.com - 89</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>base em datas.</p><p># Define a pasta onde os backups serão armazenados.</p><p>backup_dir="/path/to/backup/folder"</p><p>Essa linha define uma variável chamada backup_dir e atribui a</p><p>ela o caminho completo da pasta onde os backups serão</p><p>armazenados. Certifique-se de alterar "/path/to/backup/folder"</p><p>para o caminho real da pasta de backup desejada.</p><p>date_format="%Y-%m-%d_%H-%M-%S"</p><p>Essa linha define uma variável chamada date_format e atribui a</p><p>ela o formato de data que será usado nos nomes dos diretórios</p><p>de backup. O formato especificado aqui é</p><p>"ano-mês-dia_horas-minutos-segundos".</p><p>if [ ! -d "$backup_dir" ]; then</p><p>mkdir -p "$backup_dir"</p><p>fi</p><p>Essas linhas verificam se a pasta de backup especificada em</p><p>backup_dir já existe ou não. Se a pasta não existir, o comando</p><p>Pedro Delfino - e-tinet.com - 90</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>mkdir será executado para criá-la. O parâmetro -p é usado para</p><p>criar os diretórios pai, caso ainda não existam.</p><p>backup_dir="$backup_dir/$(date +$date_format)"</p><p>mkdir "$backup_dir"</p><p>Essas linhas criam um novo diretório de backup com base na</p><p>data atual. A variável backup_dir é atualizada com o caminho</p><p>completo do novo diretório de backup, que inclui a data atual</p><p>formatada de acordo com date_format. Em seguida, o comando</p><p>mkdir é executado para criar o diretório de backup atual.</p><p>ls -d "$backup_dir"*/ > "$backup_dir/list.txt"</p><p>Essa linha lista todos os diretórios de backup existentes</p><p>(incluindo o novo diretório criado) e salva o resultado em um</p><p>arquivo chamado list.txt dentro do diretório de backup atual. O</p><p>parâmetro -d é usado para listar apenas os diretórios, e o</p><p>caractere * é adicionado para listar apenas os diretórios cujos</p><p>nomes começam com o caminho especificado em backup_dir.</p><p>O script então termina.</p><p>Pedro Delfino - e-tinet.com - 91</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Verifica se um arquivo está vazio</p><p>e toma medidas apropriadas</p><p>#!/bin/bash</p><p># Este script verifica se um arquivo está vazio e toma</p><p>medidas apropriadas.</p><p># Define o caminho do arquivo a ser verificado.</p><p>file_path="/path/to/file.txt"</p><p># Verifica se o arquivo existe e não está vazio.</p><p>if [ -s "$file_path" ]; then</p><p>echo "O arquivo não está vazio."</p><p># Insira aqui as ações que serão executadas se o</p><p>arquivo não estiver vazio.</p><p>else</p><p>echo "O arquivo está vazio."</p><p># Insira aqui as ações que serão executadas se o</p><p>arquivo estiver vazio.</p><p>fi</p><p>file_path="/path/to/file.txt"</p><p>Essa linha define uma variável chamada file_path e atribui a ela</p><p>o caminho completo do arquivo que será verificado.</p><p>Certifique-se de alterar "/path/to/file.txt" para o caminho real do</p><p>arquivo desejado.</p><p>Pedro Delfino - e-tinet.com - 92</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>if [ -s "$file_path" ]; then</p><p>echo "O arquivo não está vazio."</p><p># Insira aqui as ações que serão executadas se o</p><p>arquivo não estiver vazio.</p><p>else</p><p>echo "O arquivo está vazio."</p><p># Insira aqui as ações que serão executadas se o</p><p>arquivo estiver vazio.</p><p>fi</p><p>Essas linhas verificam se o arquivo especificado em file_path</p><p>existe e não está vazio. O comando [ -s "$file_path" ] retorna</p><p>verdadeiro se o arquivo existir e não estiver vazio. Se o arquivo</p><p>não estiver vazio, o</p><p>comando echo será executado para exibir a</p><p>mensagem "O arquivo não está vazio." e as ações desejadas</p><p>podem ser adicionadas na linha seguinte. Caso contrário, o</p><p>comando echo será executado para exibir a mensagem "O</p><p>arquivo está vazio." e as ações desejadas podem ser adicionadas</p><p>na linha seguinte.</p><p>O script então termina.</p><p>Pedro Delfino - e-tinet.com - 93</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Transforma texto em caixa alta</p><p>ou caixa baixa</p><p>#!/bin/bash</p><p># Este script transforma texto em caixa alta ou caixa</p><p>baixa.</p><p># Define o texto a ser transformado.</p><p>text="Este é um texto de exemplo."</p><p># Define a opção de transformação (upper ou lower).</p><p>option="upper"</p><p># Verifica a opção de transformação e executa o comando</p><p>correspondente.</p><p>if [ "$option" = "upper" ]; then</p><p>transformed_text=$(echo "$text" | tr '[:lower:]'</p><p>'[:upper:]')</p><p>elif [ "$option" = "lower" ]; then</p><p>transformed_text=$(echo "$text" | tr '[:upper:]'</p><p>'[:lower:]')</p><p>else</p><p>echo "Opção inválida."</p><p>exit 1</p><p>fi</p><p># Exibe o texto transformado.</p><p>echo "$transformed_text"</p><p>Pedro Delfino - e-tinet.com - 94</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Explicação linha a linha:</p><p>text="Este é um texto de exemplo."</p><p>Essa linha define uma variável chamada text e atribui a ela um</p><p>exemplo de texto que será transformado. Você pode alterar o</p><p>valor dessa variável para o texto que deseja transform</p><p>option="upper"</p><p>Essa linha define uma variável chamada option e atribui a ela o</p><p>valor "upper", indicando que o texto será transformado em caixa</p><p>alta. Você pode alterar o valor dessa variável para "lower", se</p><p>desejar que o texto seja transformado em caixa baixa.</p><p>if [ "$option" = "upper" ]; then</p><p>transformed_text=$(echo "$text" | tr '[:lower:]'</p><p>'[:upper:]')</p><p>elif [ "$option" = "lower" ]; then</p><p>transformed_text=$(echo "$text" | tr '[:upper:]'</p><p>'[:lower:]')</p><p>else</p><p>echo "Opção inválida."</p><p>exit 1</p><p>fi</p><p>Pedro Delfino - e-tinet.com - 95</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Essas linhas verificam se a opção de transformação especificada</p><p>em option é "upper" ou "lower". Se a opção for "upper", o</p><p>comando tr é usado para transformar o texto em caixa alta. Se a</p><p>opção for "lower", o comando tr é usado para transformar o texto</p><p>em caixa baixa. Se a opção não for nem "upper" nem "lower", o</p><p>script exibe a mensagem "Opção inválida." e sai com o código</p><p>de erro 1.</p><p>Essa linha exibe o texto transformado na tela.</p><p>Pedro Delfino - e-tinet.com - 96</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Analisar e classificar dados em</p><p>arquivos CSV</p><p>#!/bin/bash</p><p># Este script analisa e classifica dados em arquivos CSV.</p><p># Define o caminho do arquivo CSV a ser analisado.</p><p>csv_file="/path/to/csv/file.csv"</p><p># Verifica se o arquivo CSV existe.</p><p>if [ ! -f "$csv_file" ]; then</p><p>echo "Arquivo CSV não encontrado."</p><p>exit 1</p><p>fi</p><p># Exibe o cabeçalho do arquivo CSV.</p><p>head -1 "$csv_file"</p><p># Exibe o número de linhas e colunas do arquivo CSV.</p><p>echo "Número de linhas e colunas:"</p><p>wc -l "$csv_file" | cut -d' ' -f1</p><p>awk -F',' '{print NF; exit}' "$csv_file"</p><p># Classifica os dados por coluna.</p><p>echo "Classificando dados por coluna..."</p><p>echo "Qual coluna você deseja classificar?"</p><p>read column_number</p><p>echo "Como você deseja classificar? (asc ou desc)"</p><p>read sort_order</p><p>echo "Dados classificados:"</p><p>tail -n +2 "$csv_file" | sort -t, -k"$column_number"</p><p>-"$sort_order"</p><p>Pedro Delfino - e-tinet.com - 97</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p># Exibe a média de uma coluna numérica.</p><p>echo "Calcular a média de qual coluna? (Digite o número</p><p>da coluna)"</p><p>read numeric_column</p><p>echo "Média da coluna $numeric_column:"</p><p>tail -n +2 "$csv_file" | cut -d',' -f"$numeric_column" |</p><p>awk '{s+=$1} END {print s/NR}'</p><p># Termina o script.</p><p>exit 0</p><p>Explicação linha a linha:</p><p>csv_file="/path/to/csv/file.csv"</p><p>Essa linha define uma variável chamada csv_file e atribui a ela o</p><p>caminho completo do arquivo CSV que será analisado.</p><p>Certifique-se de alterar "/path/to/csv/file.csv" para o caminho real</p><p>do arquivo CSV que deseja analisar.</p><p>if [ ! -f "$csv_file" ]; then</p><p>echo "Arquivo CSV não encontrado."</p><p>exit 1</p><p>fi</p><p>Essas linhas verificam se o arquivo especificado em csv_file</p><p>existe. Se o arquivo não existir, o script exibirá a mensagem</p><p>Pedro Delfino - e-tinet.com - 98</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>"Arquivo CSV não encontrado." e sairá do script com o código de</p><p>erro 1.</p><p>head -1 "$csv_file"</p><p>Essa linha exibe o cabeçalho do arquivo CSV na tela.</p><p>wc -l "$csv_file" | cut -d' ' -f1</p><p>awk -F',' '{print NF; exit}' "$csv_file"</p><p>Essas linhas exibem o número de linhas e colunas do arquivo</p><p>CSV.</p><p>echo "Classificando dados por coluna..."</p><p>echo "Qual coluna você deseja classificar?"</p><p>read column_number</p><p>echo "Como você deseja classificar? (asc ou desc)"</p><p>read sort_order</p><p>echo "Dados classificados:"</p><p>tail -n +2 "$csv_file" | sort -t, -k"$column_number"</p><p>-"$sort_order"</p><p>Essas linhas solicitam ao usuário a coluna e a ordem de</p><p>classificação, e classificam os dados por coluna com base nas</p><p>opções especificadas pelo usuário.</p><p>Pedro Delfino - e-tinet.com - 99</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>echo "Calcular a média de qual coluna? (Digite o número da</p><p>coluna)"</p><p>read numeric_column</p><p>echo "Média da coluna $numeric_column:"</p><p>tail -n +2 "$csv_file" | cut -d',' -f"$numeric_column" |</p><p>awk '{s+=$1} END {print s/NR}'</p><p>Essas linhas solicitam ao usuário a coluna que deseja calcular a</p><p>média e exibem a média da coluna especificada pelo usuário.</p><p>exit 0</p><p>Essa linha finaliza o script com código de retorno zero</p><p>(indicando que o script foi concluído com sucesso).</p><p>Pedro Delfino - e-tinet.com - 100</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Verificar se um serviço está em</p><p>execução e notificar se ele não</p><p>estiver</p><p>#!/bin/bash</p><p># Este script verifica se um serviço está em execução e</p><p>notifica se ele não estiver.</p><p># Define o nome do serviço a ser verificado.</p><p>service_name="nome-do-servico"</p><p># Verifica se o serviço está em execução.</p><p>if pgrep -x "$service_name" > /dev/null</p><p>then</p><p>echo "$service_name está em execução."</p><p>else</p><p>echo "$service_name não está em execução. Enviando</p><p>notificação..."</p><p># Comando para enviar notificação aqui.</p><p>fi</p><p>Expliação linha a linha:</p><p>service_name="nome-do-servico"</p><p>Essa linha define uma variável chamada service_name e atribui</p><p>a ela o nome do serviço que você deseja verificar. Substitua</p><p>Pedro Delfino - e-tinet.com - 101</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>"nome-do-servico" pelo nome real do serviço que deseja</p><p>verificar.</p><p>if pgrep -x "$service_name" > /dev/null</p><p>then</p><p>echo "$service_name está em execução."</p><p>else</p><p>echo "$service_name não está em execução. Enviando</p><p>notificação..."</p><p># Comando para enviar notificação aqui.</p><p>fi</p><p>Essas linhas verificam se o serviço especificado em</p><p>service_name está em execução. Se o serviço estiver em</p><p>execução, o script exibe a mensagem "$service_name está em</p><p>execução." na tela. Se o serviço não estiver em execução, o script</p><p>exibe a mensagem "$service_name não está em execução.</p><p>Enviando notificação..." na tela e um comando para enviar uma</p><p>notificação pode ser adicionado na linha seguinte.</p><p>Pedro Delfino - e-tinet.com - 102</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Enviar uma notificação por</p><p>e-mail</p><p>#!/bin/bash</p><p># Este script envia uma notificação por e-mail.</p><p># Define o endereço de e-mail do destinatário.</p><p>recipient="endereco_de_email@provedor.com"</p><p># Define o assunto do e-mail.</p><p>subject="Assunto da notificação"</p><p># Define o corpo do e-mail.</p><p>body="Corpo da notificação."</p><p># Define o endereço de e-mail do remetente.</p><p>sender="endereco_de_email@provedor.com"</p><p># Define o servidor SMTP a ser usado para enviar o</p><p>e-mail.</p><p>smtp_server="smtp.provedor.com"</p><p># Define a porta do servidor SMTP a ser usada para enviar</p><p>o e-mail.</p><p>smtp_port="587"</p><p># Define o nome de usuário do remetente para autenticação</p><p>SMTP.</p><p>smtp_user="nome_de_usuario"</p><p># Define a senha do remetente para autenticação SMTP.</p><p>smtp_password="senha_do_usuario"</p><p>Pedro Delfino - e-tinet.com - 103</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p># Define o comando para enviar o e-mail.</p><p>sendmail="/usr/sbin/sendmail -t"</p><p># Monta o cabeçalho do e-mail.</p><p>{</p><p>echo "To: $recipient"</p><p>echo "Subject: $subject"</p><p>echo "From: $sender"</p><p>echo "Content-Type: text/plain; charset=UTF-8"</p><p>echo ""</p><p>echo "$body"</p><p>} | $sendmail -S "$smtp_server:$smtp_port" -xu</p><p>"$smtp_user" -xp "$smtp_password" -f "$sender"</p><p>Explicação linha a linha:</p><p>recipient="endereco_de_email@provedor.com"</p><p>Essa linha define uma variável chamada recipient e atribui a ela</p><p>o endereço de e-mail do destinatário.</p><p>subject="Assunto da notificação"</p><p>Essa linha define uma variável chamada subject e atribui a ela o</p><p>assunto do e-mail.</p><p>body="Corpo da notificação."</p><p>Pedro Delfino - e-tinet.com - 104</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Essa linha define uma variável chamada body e atribui a ela o</p><p>corpo da mensagem.</p><p>sender="endereco_de_email@provedor.com"</p><p>Essa linha define uma variável chamada sender e atribui a ela o</p><p>endereço de e-mail do remetente.</p><p>Essa linha define uma variável chamada smtp_server e atribui a</p><p>ela o nome do servidor SMTP a ser usado para enviar o e-mail.</p><p>smtp_server="smtp.provedor.com"</p><p>Essa linha define uma variável chamada smtp_port e atribui a</p><p>ela o número da porta do servidor SMTP a ser usada para enviar</p><p>o e-mail.</p><p>smtp_user="nome_de_usuario"</p><p>Essa linha define uma variável chamada smtp_user e atribui a</p><p>ela o nome de usuário do remetente para autenticação SMTP.</p><p>smtp_password="senha_do_usuario"</p><p>Essa linha define uma variável chamada smtp_password e</p><p>atribui a ela a senha do remetente para autenticação SMTP.</p><p>sendmail="/usr/sbin/sendmail -t"</p><p>Essa linha define uma variável chamada sendmail e atribui a ela</p><p>o comando para enviar o e-mail.</p><p>Pedro Delfino - e-tinet.com - 105</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>{</p><p>echo "To: $recipient"</p><p>echo "Subject: $subject"</p><p>echo "From: $sender"</p><p>echo "Content-Type: text/plain; charset=UTF-8"</p><p>echo ""</p><p>echo "$body"</p><p>} | $sendmail -S "$smtp_server:$smtp_port" -xu</p><p>"$smtp_user" -xp "$smtp_password" -f "$sender"</p><p>Essas linhas montam o cabeçalho do e-mail com as</p><p>informações especificadas nas variáveis e enviam o e-mail</p><p>usando o comando "sendmail". O conteúdo do cabeçalho é</p><p>exibido entre chaves, seguido pelo comando de envio de e-mail.</p><p>O comando sendmail usa as informações de servidor, porta,</p><p>nome de usuário, senha e remetente definidas nas variáveis</p><p>para enviar o e-mail.</p><p>Lembre-se de que você precisará preencher as variáveis com as</p><p>informações relevantes para enviar um e-mail com sucesso.</p><p>Além disso, verifique se o comando sendmail está instalado em</p><p>seu sistema antes de usar este script.</p><p>Pedro Delfino - e-tinet.com - 106</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Verificar a conectividade com</p><p>hosts remotos</p><p>#!/bin/bash</p><p># Este script verifica a conectividade com hosts remotos.</p><p># Define uma matriz de hosts a serem verificados.</p><p>hosts=("google.com" "facebook.com" "twitter.com")</p><p># Loop através de cada host na matriz.</p><p>for host in "${hosts[@]}"</p><p>do</p><p># Verifica a conectividade com o host.</p><p>if ping -c 1 "$host" &> /dev/null</p><p>then</p><p>echo "$host está online."</p><p>else</p><p>echo "$host está offline. Verifique a conexão de</p><p>rede."</p><p>fi</p><p>done</p><p>hosts=("google.com" "facebook.com" "twitter.com")</p><p>Essa linha define uma matriz chamada hosts e atribui a</p><p>ela uma lista de nomes de host que você deseja verificar.</p><p>for host in "${hosts[@]}"</p><p>do</p><p># Verifica a conectividade com o host.</p><p>if ping -c 1 "$host" &> /dev/null</p><p>then</p><p>echo "$host está online."</p><p>else</p><p>echo "$host está offline. Verifique a conexão de</p><p>rede."</p><p>Pedro Delfino - e-tinet.com - 107</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>fi</p><p>done</p><p>Essas linhas executam um loop "for" que percorre cada host na</p><p>matriz hosts e verifica a conectividade com cada host. Se o host</p><p>estiver online, o script exibe a mensagem "$host está online." na</p><p>tela. Se o host estiver offline, o script exibe a mensagem "$host</p><p>está offline. Verifique a conexão de rede." na tela.</p><p>Pedro Delfino - e-tinet.com - 108</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Modificar as permissões de um</p><p>arquivo ou diretório</p><p>#!/bin/bash</p><p># Este script modifica as permissões de um arquivo ou</p><p>diretório.</p><p># Define o arquivo ou diretório a ser modificado.</p><p>file="caminho/para/o/arquivo_ou_diretorio"</p><p># Define as permissões a serem aplicadas.</p><p>permissions="rwxr-xr--"</p><p># Aplica as permissões ao arquivo ou diretório.</p><p>chmod "$permissions" "$file"</p><p>Explicação linha a linha:</p><p>file="caminho/para/o/arquivo_ou_diretorio"</p><p>Essa linha define uma variável chamada file e atribui a ela o</p><p>caminho para o arquivo ou diretório que você deseja modificar.</p><p>permissions="rwxr-xr--"</p><p>Essa linha define uma variável chamada permissions e atribui a</p><p>ela as permissões que você deseja aplicar ao arquivo ou</p><p>diretório.</p><p>Pedro Delfino - e-tinet.com - 109</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>● A variável "permissions" define as permissões que você</p><p>deseja aplicar. As permissões são representadas por uma</p><p>string de 10 caracteres, em que os três primeiros caracteres</p><p>especificam as permissões para o proprietário do arquivo,</p><p>os três seguintes especificam as permissões para o grupo</p><p>do arquivo e os três últimos especificam as permissões</p><p>para outros usuários. O caractere "r" indica permissão de</p><p>leitura, o caractere "w" indica permissão de gravação e o</p><p>caractere "x" indica permissão de execução.</p><p>● chmod "$permissions" "$file"</p><p>Essa linha usa o comando chmod para aplicar as permissões</p><p>especificadas na variável permissions ao arquivo ou diretório</p><p>especificado na variável file. O comando chmod altera as</p><p>permissões do arquivo ou diretório para as permissões</p><p>especificadas.</p><p>Pedro Delfino - e-tinet.com - 110</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Analisar o uso de CPU e</p><p>memória de processos</p><p>específicos</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Define o processo específico que deseja monitorar</p><p>process_name="nome_do_processo"</p><p># Obtém o PID (Identificador do processo) do processo</p><p>específico</p><p>pid=$(pgrep "$process_name")</p><p># Verifica se o processo está em execução</p><p>if [ -z "$pid" ]; then</p><p>echo "O processo $process_name não está em execução"</p><p>exit 1</p><p>fi</p><p># Loop infinito para exibir o uso de CPU e memória do</p><p>processo</p><p>while true; do</p><p># Obtém o uso de CPU e memória do processo com base no</p><p>seu PID</p><p>cpu_usage=$(ps -p "$pid" -o %cpu | grep -v CPU)</p><p>memory_usage=$(ps -p</p><p>"$pid" -o %mem | grep -v MEM)</p><p># Exibe o uso de CPU e memória do processo</p><p>echo "Uso de CPU: $cpu_usage%"</p><p>Pedro Delfino - e-tinet.com - 111</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>echo "Uso de memória: $memory_usage%"</p><p># Espera 1 segundo antes de obter novamente o uso de</p><p>CPU e memória do processo</p><p>sleep 1</p><p>done</p><p>● process_name="nome_do_processo": Define a variável</p><p>process_name com o nome do processo específico que</p><p>desejamos monitorar. É importante que o nome esteja</p><p>exatamente igual ao nome do processo que você deseja</p><p>monitorar.</p><p>● pid=$(pgrep "$process_name"): Obtém o PID (identificador</p><p>do processo) do processo específico a partir do seu nome.</p><p>O comando pgrep busca por processos que correspondem</p><p>ao nome especificado e retorna seu PID.</p><p>● if [ -z "$pid" ]; then ...: Verifica se o processo está em</p><p>execução. A expressão -z verifica se a variável $pid está</p><p>vazia, ou seja, se o processo não foi encontrado. Se o</p><p>processo não estiver em execução, o script exibe uma</p><p>mensagem de erro e finaliza a execução com o comando</p><p>exit 1.</p><p>● while true; do ...: Inicia um loop infinito para exibir o uso de</p><p>CPU e memória do processo.</p><p>● cpu_usage=$(ps -p "$pid" -o %cpu | grep -v CPU): Obtém o</p><p>uso de CPU do processo com base no seu PID. O comando</p><p>Pedro Delfino - e-tinet.com - 112</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>ps exibe informações sobre os processos em execução, e a</p><p>opção -p especifica o PID do processo que queremos</p><p>monitorar. A opção -o especifica o formato da saída, e</p><p>%cpu indica que queremos obter a porcentagem de uso</p><p>de CPU. O comando grep -v CPU filtra a saída para remover</p><p>a linha que contém o cabeçalho da coluna, que é exibido</p><p>como CPU. O resultado é armazenado na variável</p><p>cpu_usage.</p><p>● memory_usage=$(ps -p "$pid" -o %mem | grep -v MEM):</p><p>Obtém o uso de memória do processo com base no seu</p><p>PID. O comando ps é usado novamente com a opção -p</p><p>para especificar o PID do processo que queremos</p><p>monitorar. A opção -o especifica o formato da sa</p><p>Pedro Delfino - e-tinet.com - 113</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Backup remoto de arquivos de</p><p>servidor para servidor</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Define as informações do servidor de origem</p><p>source_host="IP_do_servidor_origem"</p><p>source_user="usuario_do_servidor_origem"</p><p>source_dir="/caminho/do/diretorio/de/origem"</p><p># Define as informações do servidor de destino</p><p>dest_host="IP_do_servidor_destino"</p><p>dest_user="usuario_do_servidor_destino"</p><p>dest_dir="/caminho/do/diretorio/de/destino"</p><p># Realiza o backup remoto dos arquivos</p><p>rsync -avz -e "ssh"</p><p>"$source_user@$source_host:$source_dir"</p><p>"$dest_user@$dest_host:$dest_dir"</p><p>● source_host="IP_do_servidor_origem": Define a variável</p><p>source_host com o endereço IP do servidor de origem.</p><p>● source_user="usuario_do_servidor_origem": Define a</p><p>variável source_user com o nome de usuário para fazer</p><p>login no servidor de origem.</p><p>Pedro Delfino - e-tinet.com - 114</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>● source_dir="/caminho/do/diretorio/de/origem": Define a</p><p>variável source_dir com o caminho absoluto para o</p><p>diretório de origem que será copiado.</p><p>● dest_host="IP_do_servidor_destino": Define a variável</p><p>dest_host com o endereço IP do servidor de destino.</p><p>● dest_user="usuario_do_servidor_destino": Define a variável</p><p>dest_user com o nome de usuário para fazer login no</p><p>servidor de destino.</p><p>● dest_dir="/caminho/do/diretorio/de/destino": Define a</p><p>variável dest_dir com o caminho absoluto para o diretório</p><p>de destino onde o backup será armazenado.</p><p>● rsync -avz -e "ssh"</p><p>"$source_user@$source_host:$source_dir"</p><p>"$dest_user@$dest_host:$dest_dir": Realiza o backup</p><p>remoto dos arquivos. O comando rsync é usado para</p><p>sincronizar arquivos e diretórios entre servidores, e a opção</p><p>-a indica que queremos manter as permissões,</p><p>propriedades e diretórios. A opção -v exibe informações</p><p>detalhadas sobre o processo de sincronização. A opção -z</p><p>comprime os dados durante a transferência para reduzir o</p><p>tempo de espera. A opção -e "ssh" especifica que a conexão</p><p>será realizada através do protocolo SSH. Os parâmetros</p><p>$source_user@$source_host:$source_dir e</p><p>$dest_user@$dest_host:$dest_dir especificam a origem e o</p><p>destino da sincronização. Neste caso, estamos copiando o</p><p>Pedro Delfino - e-tinet.com - 115</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>diretório de origem $source_dir do servidor de origem para</p><p>o diretório de destino $dest_dir no servidor de destino.</p><p>Pedro Delfino - e-tinet.com - 116</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Analisar logs em tempo real para</p><p>alertar sobre eventos</p><p>importantes</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Define o arquivo de log que será monitorado</p><p>log_file="/caminho/do/arquivo/de/log"</p><p># Define a string de busca que indica um evento</p><p>importante</p><p>search_string="palavra_chave"</p><p># Monitora o arquivo de log em tempo real</p><p>tail -f "$log_file" | while read line; do</p><p># Verifica se o evento importante ocorreu</p><p>if echo "$line" | grep -q "$search_string"; then</p><p># Se ocorreu, exibe um alerta</p><p>echo "ALERTA: Evento importante detectado! Mensagem:</p><p>$line"</p><p>fi</p><p>done</p><p>Pedro Delfino - e-tinet.com - 117</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>● log_file="/caminho/do/arquivo/de/log": Define a variável</p><p>log_file com o caminho absoluto para o arquivo de log que</p><p>será monitorado.</p><p>● search_string="palavra_chave": Define a variável</p><p>search_string com a palavra-chave que indica um evento</p><p>importante no log.</p><p>● tail -f "$log_file" | while read line; do ...: Monitora o arquivo</p><p>de log em tempo real usando o comando tail. A opção -f</p><p>indica que o tail deve ficar em execução contínua e exibir</p><p>as novas linhas adicionadas ao arquivo de log em tempo</p><p>real. O resultado é passado para um loop while, que lê cada</p><p>linha adicionada ao arquivo de log e executa um comando</p><p>para cada linha.</p><p>● if echo "$line" | grep -q "$search_string"; then ...: Verifica se</p><p>a linha do arquivo de log contém a palavra-chave</p><p>indicando um evento importante. O comando echo exibe a</p><p>linha lida pelo loop, que é passada para o comando grep. A</p><p>opção -q indica que o grep deve executar a busca em</p><p>modo silencioso, sem exibir a saída no terminal. Se a</p><p>palavra-chave for encontrada na linha, a expressão if será</p><p>verdadeira e o bloco de comandos seguinte será</p><p>executado.</p><p>● echo "ALERTA: Evento importante detectado! Mensagem:</p><p>$line": Exibe um alerta indicando que um evento</p><p>importante foi detectado no arquivo de log. A variável $line</p><p>contém a linha do arquivo de log que corresponde ao</p><p>Pedro Delfino - e-tinet.com - 118</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>evento importante. A mensagem de alerta é exibida no</p><p>terminal.</p><p>Pedro Delfino - e-tinet.com - 119</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Verificar a disponibilidade de</p><p>sites e serviços da Web</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Define os sites e serviços a serem verificados</p><p>sites=("http://www.exemplo1.com"</p><p>"http://www.exemplo2.com")</p><p>services=("ssh" "http" "https")</p><p># Verifica a disponibilidade dos sites</p><p>for site in "${sites[@]}"; do</p><p>if curl -s --head "$site" | head -n 1 | grep</p><p>"HTTP/1.[01] [23].." > /dev/null; then</p><p>echo "O site $site</p><p>está disponível"</p><p>else</p><p>echo "O site $site está indisponível"</p><p>fi</p><p>done</p><p># Verifica a disponibilidade dos serviços</p><p>for service in "${services[@]}"; do</p><p>if systemctl is-active "$service" > /dev/null; then</p><p>echo "O serviço $service está em execução"</p><p>else</p><p>echo "O serviço $service não está em execução"</p><p>fi</p><p>done</p><p>Pedro Delfino - e-tinet.com - 120</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>● sites=("http://www.exemplo1.com"</p><p>"http://www.exemplo2.com"): Define a variável sites como</p><p>uma matriz de URLs de sites a serem verificados.</p><p>● services=("ssh" "http" "https"): Define a variável services</p><p>como uma matriz de nomes de serviços a serem</p><p>verificados.</p><p>● for site in "${sites[@]}"; do ...: Verifica a disponibilidade dos</p><p>sites listados na variável sites. O loop for percorre cada URL</p><p>da matriz sites e executa o bloco de comandos</p><p>correspondente.</p><p>● if curl -s --head "$site" | head -n 1 | grep "HTTP/1.[01] [23].." ></p><p>/dev/null; then ...: Verifica se o site está disponível. O</p><p>comando curl é usado para acessar o site e a opção -s</p><p>indica que a saída deve ser exibida em modo silencioso,</p><p>sem exibir informações adicionais. A opção --head solicita</p><p>apenas o cabeçalho da página, em vez de todo o conteúdo.</p><p>A saída é passada para o comando head para exibir apenas</p><p>a primeira linha do cabeçalho. O comando grep é usado</p><p>para buscar a string "HTTP/1.[01] [23].." no cabeçalho da</p><p>página, que indica que o site está acessível e retornou um</p><p>código de status 2xx ou 3xx. O redirecionamento > /dev/null</p><p>oculta a saída do comando. Se o site estiver disponível, o</p><p>bloco de comandos seguinte será executado.</p><p>● echo "O site $site está disponível": Exibe uma mensagem</p><p>indicando que o site está disponível.</p><p>Pedro Delfino - e-tinet.com - 121</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>● echo "O site $site está indisponível": Exibe uma mensagem</p><p>indicando que o site está indisponível.</p><p>● for service in "${services[@]}"; do ...: Verifica a</p><p>disponibilidade dos serviços listados na variável services. O</p><p>loop for percorre cada serviço da matriz services e executa</p><p>o bloco de comandos correspondente.</p><p>● if systemctl is-active "$service" > /dev/null; then ...: Verifica se</p><p>o serviço está</p><p>Pedro Delfino - e-tinet.com - 122</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Executar comandos com</p><p>privilégios de root</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Verifica se o usuário atual tem privilégios de root</p><p>if [[ $EUID -ne 0 ]]; then</p><p>echo "Este script precisa ser executado com</p><p>privilégios de root"</p><p>exit 1</p><p>fi</p><p># Executa comandos com privilégios de root</p><p># Inserir comandos aqui</p><p>● if [[ $EUID -ne 0 ]]; then ... fi: Verifica se o usuário atual tem</p><p>privilégios de root. A variável $EUID contém o ID de usuário</p><p>efetivo (effective user ID) do usuário atual. O valor 0 é</p><p>reservado para o usuário root. O operador -ne significa</p><p>"diferente de". Se o valor de $EUID for diferente de 0, o</p><p>bloco de comandos seguinte será executado.</p><p>● echo "Este script precisa ser executado com privilégios de</p><p>root": Exibe uma mensagem de erro indicando que o script</p><p>precisa ser executado com privilégios de root.</p><p>● exit 1: Encerra o script com um código de status de erro 1.</p><p>Pedro Delfino - e-tinet.com - 123</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>● # Executa comandos com privilégios de root ...: Executa</p><p>comandos com privilégios de root. Os comandos</p><p>específicos que serão executados devem ser inseridos no</p><p>local indicado pelo comentário. É importante lembrar que</p><p>a execução de comandos com privilégios de root deve ser</p><p>realizada com cuidado e atenção, pois erros ou falhas</p><p>podem comprometer o sistema.</p><p>Pedro Delfino - e-tinet.com - 124</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Verificar se há atualizações de</p><p>segurança no debian</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Verifica se o usuário atual tem privilégios de root</p><p>if [[ $EUID -ne 0 ]]; then</p><p>echo "Este script precisa ser executado com</p><p>privilégios de root"</p><p>exit 1</p><p>fi</p><p># Atualiza a lista de pacotes disponíveis</p><p>apt-get update</p><p># Verifica se há atualizações de segurança disponíveis</p><p>if apt-get -s dist-upgrade | grep "^Inst.*security.*$" ></p><p>/dev/null; then</p><p>echo "Há atualizações de segurança disponíveis"</p><p>else</p><p>echo "Não há atualizações de segurança disponíveis"</p><p>fi</p><p>● if [[ $EUID -ne 0 ]]; then ... fi: Verifica se o usuário atual tem</p><p>privilégios de root. A variável $EUID contém o ID de usuário</p><p>efetivo (effective user ID) do usuário atual. O valor 0 é</p><p>reservado para o usuário root. O operador -ne significa</p><p>Pedro Delfino - e-tinet.com - 125</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>"diferente de". Se o valor de $EUID for diferente de 0, o</p><p>bloco de comandos seguinte será executado.</p><p>● echo "Este script precisa ser executado com privilégios de</p><p>root": Exibe uma mensagem de erro indicando que o script</p><p>precisa ser executado com privilégios de root.</p><p>● exit 1: Encerra o script com um código de status de erro 1.</p><p>● apt-get update: Atualiza a lista de pacotes disponíveis no</p><p>sistema com o comando apt-get update.</p><p>● apt-get -s dist-upgrade | grep "^Inst.*security.*$" > /dev/null:</p><p>Verifica se há atualizações de segurança disponíveis com o</p><p>comando apt-get -s dist-upgrade. A opção -s indica que o</p><p>comando deve ser executado em modo de simulação, sem</p><p>realizar as atualizações. O comando grep é usado para</p><p>buscar na saída do comando as atualizações de segurança.</p><p>A expressão regular "^Inst.*security.*$" procura por linhas</p><p>que comecem com "Inst" e contenham a palavra "security".</p><p>O redirecionamento > /dev/null oculta a saída do comando.</p><p>● echo "Há atualizações de segurança disponíveis": Exibe</p><p>uma mensagem indicando que há atualizações de</p><p>segurança disponíveis.</p><p>● echo "Não há atualizações de segurança disponíveis": Exibe</p><p>uma mensagem indicando que não há atualizações de</p><p>segurança disponíveis.</p><p>Pedro Delfino - e-tinet.com - 126</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Verificar se há atualizações de</p><p>segurança disponíveis e</p><p>instalá-las automaticamente no</p><p>debian</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Verifica se o usuário atual tem privilégios de root</p><p>if [[ $EUID -ne 0 ]]; then</p><p>echo "Este script precisa ser executado com</p><p>privilégios de root"</p><p>exit 1</p><p>fi</p><p># Atualiza a lista de pacotes disponíveis</p><p>apt-get update</p><p># Verifica se há atualizações de segurança disponíveis</p><p>if apt-get -s dist-upgrade | grep "^Inst.*security.*$" ></p><p>/dev/null; then</p><p># Instala as atualizações de segurança automaticamente</p><p>apt-get -y dist-upgrade</p><p>echo "As atualizações de segurança foram instaladas</p><p>automaticamente"</p><p>else</p><p>echo "Não há atualizações de segurança disponíveis"</p><p>fi</p><p>Pedro Delfino - e-tinet.com - 127</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>● if [[ $EUID -ne 0 ]]; then ... fi: Verifica se o usuário atual tem</p><p>privilégios de root. A variável $EUID contém o ID de usuário</p><p>efetivo (effective user ID) do usuário atual. O valor 0 é</p><p>reservado para o usuário root. O operador -ne significa</p><p>"diferente de". Se o valor de $EUID for diferente de 0, o</p><p>bloco de comandos seguinte será executado.</p><p>● echo "Este script precisa ser executado com privilégios de</p><p>root": Exibe uma mensagem de erro indicando que o script</p><p>precisa ser executado com privilégios de root.</p><p>● exit 1: Encerra o script com um código de status de</p><p>erro 1.</p><p>● apt-get update: Atualiza a lista de pacotes disponíveis no</p><p>sistema com o comando apt-get update.</p><p>● apt-get -s dist-upgrade | grep "^Inst.*security.*$" > /dev/null:</p><p>Verifica se há atualizações de segurança disponíveis com o</p><p>comando apt-get -s dist-upgrade. A opção -s indica que o</p><p>comando deve ser executado em modo de simulação, sem</p><p>realizar as atualizações. O comando grep é usado para</p><p>buscar na saída do comando as atualizações de segurança.</p><p>A expressão regular "^Inst.*security.*$" procura por linhas</p><p>que comecem com "Inst" e contenham a palavra "security".</p><p>O redirecionamento > /dev/null oculta a saída do comando.</p><p>Pedro Delfino - e-tinet.com - 128</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>● apt-get -y dist-upgrade: Instala as atualizações de</p><p>segurança automaticamente com o comando apt-get -y</p><p>dist-upgrade. A opção -y indica que o comando deve</p><p>aceitar as atualizações automaticamente, sem exigir</p><p>confirmação do usuário.</p><p>● echo "As atualizações de segurança foram instaladas</p><p>automaticamente": Exibe uma mensagem indicando que</p><p>as atualizações de segurança foram instaladas</p><p>automaticamente.</p><p>● echo "Não há atualizações de segurança disponíveis": Exibe</p><p>uma mensagem indicando que não há atualizações de</p><p>segurança disponíveis.</p><p>Pedro Delfino - e-tinet.com - 129</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Copiar arquivos grandes de</p><p>forma eficiente usando o rsync</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Define o arquivo a ser copiado e o destino da cópia</p><p>origem="/caminho/para/o/arquivo/a/ser/copiado"</p><p>destino="usuario@servidor:/caminho/para/o/destino"</p><p># Verifica se o arquivo de origem existe</p><p>if [ ! -e "$origem" ]; then</p><p>echo "O arquivo de origem não existe"</p><p>exit 1</p><p>fi</p><p># Usa o rsync para copiar o arquivo de forma eficiente</p><p>rsync -Paz --rsh="ssh" "$origem" "$destino"</p><p>● origem="/caminho/para/o/arquivo/a/ser/copiado": Define o</p><p>caminho do arquivo a ser copiado na variável origem.</p><p>● destino="usuario@servidor:/caminho/para/o/destino":</p><p>Define o destino da cópia na variável destino. O nome de</p><p>usuário e o nome do servidor devem ser substituídos pelos</p><p>valores reais.</p><p>Pedro Delfino - e-tinet.com - 130</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>● if [ ! -e "$origem" ]; then ... fi: Verifica se o arquivo de origem</p><p>existe. O operador -e verifica se o arquivo existe. Se o</p><p>arquivo não existe, o bloco de comandos seguinte será</p><p>executado.</p><p>● echo "O arquivo de origem não existe": Exibe uma</p><p>mensagem de erro indicando que o arquivo de origem não</p><p>existe.</p><p>● exit 1: Encerra o script com um código de status de erro 1.</p><p>● rsync -Paz --rsh="ssh" "$origem" "$destino": Usa o comando</p><p>rsync para copiar o arquivo de forma eficiente. A opção -P</p><p>exibe o progresso da transferência, a opção -a mantém as</p><p>permissões, a opção -z comprime os dados durante a</p><p>transferência e a opção --rsh="ssh" usa o protocolo SSH</p><p>para transferir o arquivo. O caminho da origem e o destino</p><p>da cópia são passados como argumentos para o comando.</p><p>Pedro Delfino - e-tinet.com - 131</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Enviar alertas em caso de uso</p><p>excessivo de largura de banda</p><p>em uma rede</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Define o limite de largura de banda em bytes por</p><p>segundo</p><p>limite=1000000 # 1 MB/s</p><p># Obtém a largura de banda atual em bytes por segundo</p><p>largura_de_banda=$(ifstat -b -q 1 1 | tail -n 1 | awk</p><p>'{print $2}')</p><p># Verifica se a largura de banda atual excede o limite</p><p>definido</p><p>if [ "$largura_de_banda" -gt "$limite" ]; then</p><p># Envia um alerta por e-mail</p><p>echo "Uso excessivo de largura de banda:</p><p>$largura_de_banda bytes/s" | mail -s "Alerta de uso de</p><p>largura de banda" destinatario@dominio.com</p><p>fi</p><p>● limite=1000000: Define o limite de largura de banda em</p><p>bytes por segundo na variável limite. O valor 1000000</p><p>representa 1 MB/s.</p><p>● largura_de_banda=$(ifstat -b -q 1 1 | tail -n 1 | awk '{print</p><p>$2}'): Obtém a largura de banda atual em bytes por</p><p>Pedro Delfino - e-tinet.com - 132</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>segundo com o comando ifstat. A opção -b exibe a largura</p><p>de banda em bytes por segundo, a opção -q 1 exibe a</p><p>largura de banda apenas uma vez e a opção 1 indica que a</p><p>exibição deve durar 1 segundo. O comando tail é usado</p><p>para obter a última linha da saída, que contém a largura de</p><p>banda atual. O comando awk é usado para extrair o</p><p>segundo campo da linha, que contém a largura de banda</p><p>em bytes por segundo.</p><p>● if [ "$largura_de_banda" -gt "$limite" ]; then ... fi: Verifica se a</p><p>largura de banda atual excede o limite definido. O</p><p>operador -gt significa "maior que". Se a largura de banda</p><p>atual for maior que o limite definido, o bloco de comandos</p><p>seguinte será executado.</p><p>● echo "Uso excessivo de largura de banda:</p><p>$largura_de_banda bytes/s" | mail -s "Alerta de uso de</p><p>largura de banda" destinatario@dominio.com: Envia um</p><p>alerta por e-mail com o comando mail. A mensagem do</p><p>e-mail contém a largura de banda atual em bytes por</p><p>segundo e o destinatário é especificado no endereço de</p><p>e-mail destinatario@dominio.com. O assunto do e-mail é</p><p>"Alerta de uso de largura de banda".</p><p>Pedro Delfino - e-tinet.com - 133</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Criar uma lista de arquivos e</p><p>pastas em um diretório com</p><p>base em datas de modificação</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Define o diretório a ser listado</p><p>diretorio="/caminho/para/o/diretorio"</p><p># Define as datas de início e fim da pesquisa</p><p>data_inicio="2022-01-01"</p><p>data_fim="2022-12-31"</p><p># Lista os arquivos e pastas no diretório com base nas</p><p>datas de modificação</p><p>find "$diretorio" -type f -newermt "$data_inicio" !</p><p>-newermt "$data_fim" -printf "%p\t%TY-%Tm-%Td</p><p>%TH:%TM:%TS\n" > lista_arquivos.txt</p><p>find "$diretorio" -type d -newermt "$data_inicio" !</p><p>-newermt "$data_fim" -printf "%p\t%TY-%Tm-%Td</p><p>%TH:%TM:%TS\n" > lista_pastas.txt</p><p>● diretorio="/caminho/para/o/diretorio": Define o caminho do</p><p>diretório a ser listado na variável diretorio.</p><p>Pedro Delfino - e-tinet.com - 134</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>● data_inicio="2022-01-01": Define a data de início da</p><p>pesquisa na variável data_inicio. O formato da data é</p><p>AAAA-MM-DD.</p><p>● data_fim="2022-12-31": Define a data de fim da pesquisa na</p><p>variável data_fim. O formato da data é AAAA-MM-DD.</p><p>● find "$diretorio" -type f -newermt "$data_inicio" ! -newermt</p><p>"$data_fim" -printf "%p\t%TY-%Tm-%Td %TH:%TM:%TS\n" ></p><p>lista_arquivos.txt: Lista os arquivos no diretório com base</p><p>nas datas de modificação usando o comando find. A opção</p><p>-type f indica que apenas arquivos devem ser listados, a</p><p>opção -newermt indica que os arquivos devem ser mais</p><p>recentes que a data de início da pesquisa e a opção !</p><p>-newermt indica que os arquivos não devem ser mais</p><p>recentes que a data de fim da pesquisa. O formato da</p><p>impressão dos arquivos é "%p\t%TY-%Tm-%Td</p><p>%TH:%TM:%TS\n", que exibe o caminho do arquivo, a data</p><p>de modificação no formato AAAA-MM-DD HH:MM:SS e um</p><p>caractere de quebra de linha. O redirecionamento ></p><p>lista_arquivos.txt envia a saída do comando para o arquivo</p><p>"lista_arquivos.txt".</p><p>● find "$diretorio" -type d -newermt "$data_inicio" ! -newermt</p><p>"$data_fim" -printf "%p\t%TY-%Tm-%Td %TH:%TM:%TS\n" ></p><p>lista_pastas.txt: Lista as pastas no diretório com base nas</p><p>datas de modificação usando o comando find. A opção</p><p>-type d indica que apenas pastas devem ser listadas. O</p><p>formato</p><p>da impressão das pastas é o mesmo que o dos</p><p>Pedro Delfino - e-tinet.com - 135</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>arquivos. O redirecionamento > lista_pastas.txt envia a</p><p>saída do comando para o arquivo "lista_pastas.txt".</p><p>Pedro Delfino - e-tinet.com - 136</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Monitorar a disponibilidade de</p><p>serviços e reiniciá-los se</p><p>necessário</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Define os serviços a serem monitorados</p><p>servicos=("servico1" "servico2" "servico3")</p><p># Define o intervalo de tempo entre as verificações em</p><p>segundos</p><p>intervalo=60</p><p># Verifica a disponibilidade dos serviços indefinidamente</p><p>while true; do</p><p>for servico in "${servicos[@]}"; do</p><p># Verifica se o serviço está em execução</p><p>if ! systemctl is-active "$servico" > /dev/null;</p><p>then</p><p># Reinicia o serviço</p><p>echo "O serviço $servico não está em execução.</p><p>Reiniciando o serviço..."</p><p>systemctl restart "$servico"</p><p>fi</p><p>done</p><p># Aguarda o intervalo de tempo definido antes de fazer</p><p>a próxima verificação</p><p>sleep "$intervalo"</p><p>done</p><p>Pedro Delfino - e-tinet.com - 137</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>● servicos=("servico1" "servico2" "servico3"): Define os serviços</p><p>a serem monitorados na variável servicos. Os nomes dos</p><p>serviços devem ser substituídos pelos valores reais.</p><p>● intervalo=60: Define o intervalo de tempo entre as</p><p>verificações em segundos na variável intervalo. O valor 60</p><p>representa 1 minuto.</p><p>● while true; do ... done: Cria um loop infinito para verificar a</p><p>disponibilidade dos serviços indefinidamente. O bloco de</p><p>comandos entre do e done será executado repetidamente.</p><p>● for servico in "${servicos[@]}"; do ... done: Para cada serviço</p><p>definido na variável servicos, cria um loop para verificar a</p><p>disponibilidade do serviço. O bloco de comandos entre do</p><p>e done será executado uma vez para cada serviço.</p><p>● if ! systemctl is-active "$servico" > /dev/null; then ... fi:</p><p>Verifica se o serviço está em execução usando o comando</p><p>systemctl. O operador ! nega o resultado do comando,</p><p>fazendo com que o bloco de comandos seguinte seja</p><p>executado se o serviço não estiver em execução.</p><p>● echo "O serviço $servico não está em execução.</p><p>Reiniciando o serviço...": Exibe uma mensagem indicando</p><p>que o serviço não está em execução e será reiniciado.</p><p>● systemctl restart "$servico": Reinicia o serviço com o</p><p>comando systemctl.</p><p>Pedro Delfino - e-tinet.com - 138</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>● sleep "$intervalo": Aguarda o intervalo de tempo definido</p><p>na variável intervalo antes de fazer a próxima verificação.</p><p>Pedro Delfino - e-tinet.com - 139</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Converter arquivos de imagem</p><p>em vários formatos</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Define o diretório dos arquivos de imagem originais</p><p>diretorio_origem="/caminho/para/o/diretorio/de/imagens/or</p><p>iginais"</p><p># Define o diretório de destino dos arquivos de imagem</p><p>convertidos</p><p>diretorio_destino="/caminho/para/o/diretorio/de/imagens/c</p><p>onvertidas"</p><p># Define a lista de formatos de saída</p><p>formatos=("jpg" "png" "gif")</p><p># Converte os arquivos de imagem para os formatos</p><p>especificados</p><p>for arquivo in "$diretorio_origem"/*; do</p><p>for formato in "${formatos[@]}"; do</p><p>novo_arquivo="$diretorio_destino/$(basename</p><p>"$arquivo" .${arquivo##*.}).$formato"</p><p>convert "$arquivo" "$novo_arquivo"</p><p>done</p><p>done</p><p>Pedro Delfino - e-tinet.com - 140</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>● diretorio_origem="/caminho/para/o/diretorio/de/imagens/ori</p><p>ginais": Define o caminho do diretório dos arquivos de</p><p>imagem originais na variável diretorio_origem.</p><p>● diretorio_destino="/caminho/para/o/diretorio/de/imagens/co</p><p>nvertidas": Define o caminho do diretório de destino dos</p><p>arquivos de imagem convertidos na variável</p><p>diretorio_destino.</p><p>● formatos=("jpg" "png" "gif"): Define a lista de formatos de</p><p>saída na variável formatos. Os formatos devem ser</p><p>substituídos pelos valores reais.</p><p>● for arquivo in "$diretorio_origem"/*; do ... done: Para cada</p><p>arquivo de imagem no diretório de origem, cria um loop</p><p>para converter o arquivo para os formatos especificados. O</p><p>bloco de comandos entre do e done será executado uma</p><p>vez para cada arquivo.</p><p>● for formato in "${formatos[@]}"; do ... done: Para cada</p><p>formato de saída definido na variável formatos, cria um</p><p>loop para converter o arquivo de imagem para o formato</p><p>especificado. O bloco de comandos entre do e done será</p><p>executado uma vez para cada formato.</p><p>● novo_arquivo="$diretorio_destino/$(basename "$arquivo"</p><p>.${arquivo##*.}).$formato": Define o caminho do arquivo de</p><p>imagem convertido com o novo nome e novo formato na</p><p>variável novo_arquivo. O comando basename extrai o</p><p>Pedro Delfino - e-tinet.com - 141</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>nome do arquivo sem o caminho e a extensão, e a</p><p>expansão ${arquivo##*.} extrai a extensão do arquivo.</p><p>● convert "$arquivo" "$novo_arquivo": Converte o arquivo de</p><p>imagem original para o formato especificado com o</p><p>comando convert, que faz parte do pacote ImageMagick.</p><p>O arquivo convertido é salvo no diretório de destino com o</p><p>novo nome e novo formato definidos na variável</p><p>novo_arquivo.</p><p>Pedro Delfino - e-tinet.com - 142</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Automatizar o processo de</p><p>criação de usuários no sistema</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Define o caminho do arquivo de entrada com as</p><p>informações dos usuários</p><p>arquivo_input="usuarios.txt"</p><p># Cria os usuários a partir do arquivo de entrada</p><p>while read linha; do</p><p># Separa as informações do usuário em variáveis</p><p>separadas</p><p>nome=$(echo "$linha" | cut -d',' -f1)</p><p>senha=$(echo "$linha" | cut -d',' -f2)</p><p>grupo=$(echo "$linha" | cut -d',' -f3)</p><p># Cria o usuário com a senha especificada e adiciona-o</p><p>ao grupo especificado</p><p>useradd -m -s /bin/bash -p "$(openssl passwd -1</p><p>"$senha")" -G "$grupo" "$nome"</p><p>done</p><p>passwd -1 "$senha": Gera o hash da senha no</p><p>formato MD5 usando o comando openssl passwd -1. A</p><p>opção -1 indica que o hash deve ser gerado no formato</p><p>MD5. O valor da senha é especificado na variável senha.</p><p>Dessa forma, esse script automatiza o processo de criação de</p><p>usuários no sistema, permitindo que as informações dos</p><p>Pedro Delfino - e-tinet.com - 144</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>usuários sejam lidas a partir de um arquivo de entrada e criando</p><p>os usuários com as informações especificadas no arquivo. Esse</p><p>processo é útil em ambientes onde é necessário criar muitos</p><p>usuários de uma só vez, pois evita a necessidade de criar cada</p><p>usuário manualmente.</p><p>Pedro Delfino - e-tinet.com - 145</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Verificar se há atualizações de</p><p>software disponíveis e notificar</p><p>automaticamente</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Define o intervalo de tempo entre as verificações em</p><p>segundos</p><p>intervalo=86400</p><p># Define as informações do email</p><p>remetente="seuemail@gmail.com"</p><p>destinatario="destinatario@gmail.com"</p><p>assunto="Atualizações de software disponíveis"</p><p># Verifica as atualizações de software indefinidamente</p><p>while true; do</p><p># Executa o comando apt update para atualizar a lista</p><p>de pacotes disponíveis</p><p>apt update</p><p># Verifica se há atualizações disponíveis</p><p>pacotes=$(apt list --upgradable 2>/dev/null | grep -v</p><p>"Listing..." | wc -l)</p><p># Envia um aviso por email se há atualizações</p><p>disponíveis</p><p>if [ "$pacotes" -gt 0 ]; then</p><p>mensagem="Há $pacotes atualizações de software</p><p>Pedro Delfino - e-tinet.com - 146</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>disponíveis."</p><p>echo "$mensagem"</p><p>echo "$mensagem" | mail -s "$assunto" -r</p><p>"$remetente" "$destinatario"</p><p>fi</p><p># Aguarda o intervalo de tempo definido antes de fazer</p><p>a próxima verificação</p><p>sleep "$intervalo"</p><p>done</p><p>Explicação linha a linha:</p><p>● remetente="seuemail@gmail.com": Define o endereço de</p><p>email do remetente na variável remetente.</p><p>● destinatario="destinatario@gmail.com": Define o endereço</p><p>de email do destinatário na variável destinatario.</p><p>● assunto="Atualizações de software disponíveis": Define o</p><p>assunto do email na variável assunto.</p><p>● mensagem="Há $pacotes atualizações de software</p><p>disponíveis.": Cria a mensagem do email com o número de</p><p>atualizações de software disponíveis na variável</p><p>mensagem.</p><p>● echo "$mensagem": Exibe a mensagem no terminal para</p><p>fins de depuração.</p><p>● echo "$mensagem" | mail -s "$assunto" -r "$remetente"</p><p>"$destinatario": Envia a mensagem por email usando o</p><p>Pedro Delfino - e-tinet.com - 147</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>comando mail. A opção -s define o assunto do email, a</p><p>opção -r define o endereço de email do remetente e a</p><p>opção $destinatario define o endereço de email do</p><p>destinatário.</p><p>Dessa forma, esse script automatiza o processo de verificação de</p><p>atualizações de software disponíveis no sistema e envia um</p><p>aviso por email para o destinatário especificado se houver</p><p>atualizações disponíveis. Ele pode ser executado em segundo</p><p>plano para permitir que o usuário seja notificado</p><p>automaticamente sobre as atualizações disponíveis.</p><p>Pedro Delfino - e-tinet.com - 148</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Realizar o backup de</p><p>configurações do sistema</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Define o diretório de destino para o backup</p><p>diretorio_destino="/home/usuario/backup/configuracoes"</p><p># Cria o diretório de destino se ele não existir</p><p>mkdir -p "$diretorio_destino"</p><p># Realiza o backup das configurações do sistema</p><p>tar -czf "$diretorio_destino/configuracoes_$(date</p><p>+%Y-%m-%d_%H%M%S).tar.gz" /etc /usr/local/etc</p><p># Exibe uma mensagem informando que o backup foi</p><p>concluído</p><p>echo "O backup das configurações do sistema foi concluído</p><p>com sucesso."</p><p># Remove backups antigos</p><p>find "$diretorio_destino" -type f -name "configuracoes_*"</p><p>-mtime +30 -delete</p><p># Exibe uma mensagem informando que a limpeza de backups</p><p>antigos foi concluída</p><p>echo "A limpeza de backups antigos foi concluída com</p><p>sucesso."</p><p>Pedro Delfino - e-tinet.com - 149</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Resumo da funcionalidade:</p><p>Esse script em bash realiza o backup das configurações do</p><p>sistema em um diretório de destino especificado. O backup é</p><p>criado usando o comando tar e é nomeado com a data e hora</p><p>atual para permitir a identificação do backup. Após a conclusão</p><p>do backup, o script exibe uma mensagem no terminal para</p><p>informar que o backup foi concluído com sucesso. O script</p><p>também remove backups antigos com mais de 30 dias usando</p><p>o comando find, e exibe uma mensagem no terminal para</p><p>informar que a limpeza de backups antigos foi concluída com</p><p>sucesso. Esse processo é útil para manter um histórico de</p><p>backups das configurações do sistema e garantir a integridade</p><p>dos dados importantes.</p><p>Explicação linha a linha:</p><p>● diretorio_destino="/home/usuario/backup/configuracoes":</p><p>Define o diretório de destino para o backup na variável</p><p>diretorio_destino.</p><p>● mkdir -p "$diretorio_destino": Cria o diretório de destino se</p><p>ele não existir usando o comando mkdir. A opção -p cria</p><p>todos os diretórios necessários para criar o diretório de</p><p>destino especificado.</p><p>● tar -czf "$diretorio_destino/configuracoes_$(date</p><p>+%Y-%m-%d_%H%M%S).tar.gz" /etc /usr/local/etc: Realiza o</p><p>backup das configurações do sistema usando o comando</p><p>tar. O backup é criado como um arquivo tar compactado</p><p>Pedro Delfino - e-tinet.com - 150</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>com gzip com o nome</p><p>configuracoes_YYYY-MM-DD_HHMMSS.tar.gz, onde</p><p>YYYY-MM-DD_HHMMSS é a data e hora atual. As pastas</p><p>/etc e /usr/local/etc são incluídas no backup.</p><p>● echo "O backup das configurações do sistema foi concluído</p><p>com sucesso.": Exibe uma mensagem no terminal</p><p>informando que o backup foi concluído com sucesso.</p><p>● find "$diretorio_destino" -type f -name "configuracoes_*"</p><p>-mtime +30 -delete: Remove backups antigos com mais de</p><p>30 dias usando o comando find. O comando localiza todos</p><p>os arquivos com o nome configuracoes_* no diretório de</p><p>destino que tenham sido modificados há mais de 30 dias</p><p>usando a opção -mtime +30, e os remove com a opção</p><p>-delete.</p><p>Pedro Delfino - e-tinet.com - 151</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Automatizar a instalação de</p><p>softwares em sistemas</p><p>recém-instalados</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Define a lista de pacotes a serem instalados</p><p>pacotes=(</p><p>pacote1</p><p>pacote2</p><p>pacote3</p><p>...</p><p>)</p><p># Atualiza a lista de pacotes disponíveis</p><p>apt update</p><p># Instala os pacotes especificados na lista</p><p>apt install -y "${pacotes[@]}"</p><p># Exibe uma mensagem informando que a instalação de</p><p>pacotes foi concluída</p><p>echo "A instalação de pacotes foi concluída com sucesso."</p><p>Resumo da funcionalidade:</p><p>Pedro Delfino - e-tinet.com - 152</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Esse script em bash automatiza a instalação de softwares em</p><p>sistemas recém-instalados. Ele define uma lista de pacotes a</p><p>serem instalados e, em seguida, atualiza a lista de pacotes</p><p>disponíveis e instala os pacotes especificados na lista. O script</p><p>exibe uma mensagem no terminal para informar que a</p><p>instalação de pacotes foi concluída com sucesso.</p><p>Esse processo</p><p>é útil para automatizar a instalação de softwares comuns em</p><p>um novo sistema, permitindo que o usuário comece a usá-lo</p><p>com mais rapidez e eficiência.</p><p>Explicação linha a linha:</p><p>● pacotes=(pacote1 pacote2 pacote3 ...): Define a lista de</p><p>pacotes a serem instalados na variável pacotes. Substitua</p><p>pacote1, pacote2, pacote3, etc. pelos nomes dos pacotes</p><p>que deseja instalar.</p><p>● apt update: Atualiza a lista de pacotes disponíveis usando o</p><p>comando apt.</p><p>● apt install -y "${pacotes[@]}": Instala os pacotes</p><p>especificados na lista usando o comando apt install. A</p><p>opção -y confirma automaticamente a instalação dos</p><p>pacotes sem a necessidade de interação do usuário. A</p><p>variável "${pacotes[@]}" é expandida para incluir todos os</p><p>pacotes da lista.</p><p>● echo "A instalação de pacotes foi concluída com sucesso.":</p><p>Exibe uma mensagem no terminal informando que a</p><p>instalação de pacotes foi concluída com sucesso.</p><p>Pedro Delfino - e-tinet.com - 153</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Dessa forma, esse script em bash automatiza a instalação de</p><p>pacotes comuns em sistemas recém-instalados, permitindo que</p><p>o usuário comece a usá-lo com mais rapidez e eficiência.</p><p>Pedro Delfino - e-tinet.com - 154</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Automatizar a instalação do</p><p>sistema LAMP no LINUX</p><p>#!/bin/bash</p><p># Inicializa a shell do bash</p><p># Define a lista de pacotes a serem instalados</p><p>pacotes=(</p><p>apache2</p><p>mysql-server</p><p>php</p><p>libapache2-mod-php</p><p>php-mysql</p><p>)</p><p># Atualiza a lista de pacotes disponíveis</p><p>apt update</p><p># Instala os pacotes especificados na lista</p><p>apt install -y "${pacotes[@]}"</p><p># Exibe uma mensagem informando que a instalação de</p><p>pacotes foi concluída</p><p>echo "A instalação de pacotes foi concluída com sucesso."</p><p>Pedro Delfino - e-tinet.com - 155</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Nesse caso, os pacotes adicionados são:</p><p>● apache2: servidor web Apache</p><p>● mysql-server: servidor MySQL</p><p>● php: interpretador PHP</p><p>● libapache2-mod-php: módulo do Apache para o PHP</p><p>● php-mysql: biblioteca PHP para conexão com o MySQL</p><p>Com esse script em bash, a instalação do LAMP pode ser</p><p>automatizada em um sistema recém-instalado, permitindo que</p><p>o usuário comece a usar rapidamente um ambiente de</p><p>desenvolvimento web completo.</p><p>Pedro Delfino - e-tinet.com - 156</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>se o diretório existe.</p><p>O operador ! é usado para negar a condição, ou seja, se o</p><p>diretório não existir, a condição será verdadeira e o bloco de</p><p>código dentro do if será executado.</p><p># Cria o diretório se ele não existir</p><p>mkdir -p "$caminho_do_diretorio"</p><p>echo "Diretório criado em $caminho_do_diretorio"</p><p>else</p><p>echo "O diretório $caminho_do_diretorio já existe"</p><p>fi</p><p>Pedro Delfino - e-tinet.com - 8</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Se a condição do if for verdadeira, a linha mkdir -p</p><p>"$caminho_do_diretorio" será executada, o que criará o diretório</p><p>especificado em $caminho_do_diretorio.</p><p>Em seguida, a linha echo "Diretório criado em</p><p>$caminho_do_diretorio" será executada, o que exibirá uma</p><p>mensagem indicando que o diretório foi criado.</p><p>Caso contrário, se o diretório já existir, a linha echo "O diretório</p><p>$caminho_do_diretorio já existe"</p><p>Pedro Delfino - e-tinet.com - 9</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Criar um backup de um arquivo</p><p>#!/bin/bash</p><p># Define o caminho do arquivo original</p><p>caminho_do_arquivo_original="caminho/para/arquivo/origina</p><p>l.txt"</p><p># Define o caminho do diretório de backup</p><p>caminho_do_diretorio_de_backup="caminho/para/diretorio/ba</p><p>ckup"</p><p># Cria o diretório de backup se ele não existir</p><p>if [ ! -d "$caminho_do_diretorio_de_backup" ]; then</p><p>mkdir -p "$caminho_do_diretorio_de_backup"</p><p>fi</p><p># Cria o backup do arquivo original</p><p>cp "$caminho_do_arquivo_original"</p><p>"$caminho_do_diretorio_de_backup/arquivo_backup.txt"</p><p># Exibe uma mensagem indicando que o backup foi criado</p><p>com sucesso</p><p>echo "Backup do arquivo $caminho_do_arquivo_original</p><p>criado em $caminho_do_diretorio_de_backup"</p><p>Esse script começa definindo o caminho do arquivo original e o</p><p>caminho do diretório de backup. Em seguida, o script verifica se</p><p>o diretório de backup já existe. Se o diretório de backup não</p><p>existir, o script o cria usando o comando mkdir -p.</p><p>Pedro Delfino - e-tinet.com - 10</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Em seguida, o script cria o backup do arquivo original usando o</p><p>comando cp. O backup é criado em</p><p>$caminho_do_diretorio_de_backup/arquivo_backup.txt.</p><p>Finalmente, o script exibe uma mensagem indicando que o</p><p>backup foi criado com sucesso.</p><p>Aqui está a explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Define o caminho do arquivo original</p><p>caminho_do_arquivo_original="caminho/para/arquivo/origina</p><p>l.txt"</p><p># Define o caminho do diretório de backup</p><p>caminho_do_diretorio_de_backup="caminho/para/diretorio/ba</p><p>ckup"</p><p>A terceira linha é um comentário que define o caminho do</p><p>diretório de backup. Isso permite que o usuário especifique o</p><p>caminho do diretório de backup. Por exemplo,</p><p>"caminho/para/diretorio/backup".</p><p># Cria o diretório de backup se ele não existir</p><p>if [ ! -d "$caminho_do_diretorio_de_backup" ]; then</p><p>mkdir -p "$caminho_do_diretorio_de_backup"</p><p>fi</p><p>Essa linha é um comentário que indica que a criação do</p><p>diretório de backup começa.</p><p>Pedro Delfino - e-tinet.com - 11</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>A linha if [ ! -d "$caminho_do_diretorio_de_backup" ]; then é a</p><p>estrutura condicional if em que a condição é verificar se o</p><p>diretório de backup já existe. O operador -d é usado para</p><p>verificar se o diretório existe. O operador ! é usado para negar a</p><p>condição, ou seja, se o diretório não existir, a condição será</p><p>verdadeira e o bloco de código dentro do if será executado.</p><p>Se o diretório de backup não existir, a linha mkdir -p</p><p>"$caminho_do_diretorio_de_backup" será executada, o que</p><p>criará o diretório de backup especificado em</p><p>$caminho_do_diretorio_de_backup.</p><p># Cria o backup do arquivo original</p><p>cp "$caminho_do_arquivo_original"</p><p>"$caminho_do_diretorio_de_backup/arquivo_backup.txt"</p><p>Essa linha é um comentário que indica que a criação do backup</p><p>do arquivo original começa.</p><p>A linha cp "$caminho_do_arquivo_original"</p><p>"$caminho_do_diretorio_de_backup/arquivo_backup.txt" cria o</p><p>backup do arquivo original especificado em</p><p>$caminho_do_arquivo_original. O backup é criado em</p><p>$caminho_do_diretorio_de_backup/arquivo_backup.txt.</p><p># Exibe uma mensagem indicando que o backup foi criado</p><p>com sucesso</p><p>echo "Backup do arquivo $caminho_do_arquivo_original</p><p>criado em $caminho_do_diretorio_de_backup"</p><p>Pedro Delfino - e-tinet.com - 12</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Essa linha é um comentário que indica que a exibição da</p><p>mensagem começa.</p><p>A linha echo "Backup do arquivo $caminho_do_arquivo_original</p><p>criado em $caminho_do_diretorio_de_backup" exibe uma</p><p>mensagem indicando que o backup foi criado com sucesso,</p><p>mostrando o caminho do arquivo original e o caminho do</p><p>diretório de backup.</p><p>Pedro Delfino - e-tinet.com - 13</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Exibir o número de linhas em um</p><p>arquivo</p><p>#!/bin/bash</p><p># Define o caminho do arquivo a ser verificado</p><p>caminho_do_arquivo="caminho/para/arquivo.txt"</p><p># Verifica se o arquivo existe</p><p>if [ -e "$caminho_do_arquivo" ]; then</p><p># Conta o número de linhas no arquivo</p><p>num_linhas=$(wc -l</p><p>que o arquivo não existe.</p><p>Pedro Delfino - e-tinet.com - 16</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Listar todos os arquivos em um</p><p>diretório</p><p>#!/bin/bash</p><p># Define o caminho do diretório a ser listado</p><p>caminho_do_diretorio="caminho/para/diretorio"</p><p># Verifica se o diretório existe</p><p>if [ -d "$caminho_do_diretorio" ]; then</p><p># Lista todos os arquivos no diretório</p><p>ls "$caminho_do_diretorio"</p><p>else</p><p>echo "O diretório $caminho_do_diretorio não existe."</p><p>fi</p><p>Esse script começa definindo o caminho do diretório a ser</p><p>listado. Em seguida, usa uma estrutura condicional if para</p><p>verificar se o diretório existe. Se o diretório existir, o script lista</p><p>todos os arquivos no diretório usando o comando ls.</p><p>Caso contrário, se o diretório não existir, o script exibe uma</p><p>mensagem indicando que o diretório não existe.</p><p>Aqui está a explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Define o caminho do diretório a ser listado</p><p>caminho_do_diretorio="caminho/para/diretorio"</p><p>Pedro Delfino - e-tinet.com - 17</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>A segunda linha é um comentário que define o caminho do</p><p>diretório que será listado. Isso permite que o usuário especifique</p><p>o caminho do diretório a ser listado. Por exemplo,</p><p>"caminho/para/diretorio".</p><p># Verifica se o diretório existe</p><p>if [ -d "$caminho_do_diretorio" ]; then</p><p>Essa linha é um comentário que indica que a verificação do</p><p>diretório começa.</p><p>A linha if [ -d "$caminho_do_diretorio" ]; then é a estrutura</p><p>condicional if em que a condição é verificar se o diretório existe.</p><p>O operador -d é usado para verificar se o diretório existe e</p><p>retorna um valor verdadeiro se o diretório existir. Se o diretório</p><p>existir, a condição será verdadeira e o bloco de código dentro do</p><p>if será executado.</p><p># Lista todos os arquivos no diretório</p><p>ls "$caminho_do_diretorio"</p><p>else</p><p>echo "O diretório $caminho_do_diretorio não existe."</p><p>fi</p><p>Se a condição do if for verdadeira, a linha ls</p><p>"$caminho_do_diretorio" será executada, o que listará todos os</p><p>arquivos no diretório usando o comando ls.</p><p>Pedro Delfino - e-tinet.com - 18</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Caso contrário, se o diretório não existir, a linha echo "O diretório</p><p>$caminho_do_diretorio não existe." será executada, o que exibirá</p><p>uma mensagem indicando que o diretório não existe.</p><p>Pedro Delfino - e-tinet.com - 19</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Renomear arquivos em um</p><p>diretório</p><p>#!/bin/bash</p><p># Define o caminho do diretório que contém os arquivos a</p><p>serem renomeados</p><p>caminho_do_diretorio="caminho/para/diretorio"</p><p># Define o padrão antigo do nome do arquivo</p><p>padrao_antigo="padrao_antigo"</p><p># Define o novo padrão do nome do arquivo</p><p>novo_padrao="novo_padrao"</p><p># Loop através de cada arquivo no diretório</p><p>for arquivo in</p><p>"$caminho_do_diretorio"/*"$padrao_antigo"*; do</p><p># Extrai o nome do arquivo sem o caminho do diretório</p><p>nome_do_arquivo=$(basename "$arquivo")</p><p># Substitui o padrão antigo pelo novo padrão no nome do</p><p>arquivo</p><p>novo_nome_do_arquivo=${nome_do_arquivo//$padrao_antigo/$n</p><p>ovo_padrao}</p><p># Renomeia o arquivo</p><p>mv "$arquivo"</p><p>"$caminho_do_diretorio/$novo_nome_do_arquivo"</p><p>done</p><p>Esse script começa definindo o caminho do diretório que</p><p>contém os arquivos a serem renomeados, o padrão antigo do</p><p>Pedro Delfino - e-tinet.com - 20</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>nome do arquivo e o novo padrão do nome do arquivo. Em</p><p>seguida, usa um loop for para percorrer cada arquivo no</p><p>diretório e renomeá-los substituindo o padrão antigo pelo novo</p><p>padrão.</p><p>Aqui está a explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Define o caminho do diretório que contém os arquivos a</p><p>serem renomeados</p><p>caminho_do_diretorio="caminho/para/diretorio"</p><p># Define o padrão antigo do nome do arquivo</p><p>padrao_antigo="padrao_antigo"</p><p># Define o novo padrão do nome do arquivo</p><p>novo_padrao="novo_padrao"</p><p>A segunda linha é um comentário que define o caminho do</p><p>diretório que contém os arquivos a serem renomeados.</p><p>A terceira linha é um comentário que define o padrão antigo do</p><p>nome do arquivo que será substituído.</p><p>A quarta linha é um comentário que define o novo padrão do</p><p>nome do arquivo que substituirá o padrão antigo.</p><p># Loop através de cada arquivo no diretório</p><p>for arquivo in "$caminho_do_diretorio"/*"$padrao_antigo"*; do</p><p>Pedro Delfino - e-tinet.com - 21</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Essa linha é um comentário que indica que o loop começa.</p><p>A linha for arquivo in</p><p>"$caminho_do_diretorio"/*"$padrao_antigo"*; do usa um loop for</p><p>para percorrer cada arquivo no diretório especificado em</p><p>$caminho_do_diretorio que contém o padrão antigo em seu</p><p>nome.</p><p># Extrai o nome do arquivo sem o caminho do diretório</p><p>nome_do_arquivo=$(basename "$arquivo")</p><p>Essa linha é um comentário que indica que a extração do nome</p><p>do arquivo começa.</p><p>A linha nome_do_arquivo=$(basename "$arquivo") extrai o</p><p>nome do arquivo sem o caminho do diretório usando o</p><p>comando basename. O nome do arquivo é armazenado na</p><p>variável `novo_nome_do_arquivo`</p><p># Substitui o padrão antigo pelo novo padrão no nome do</p><p>arquivo</p><p>novo_nome_do_arquivo=${nome_do_arquivo//$padrao_antigo/$n</p><p>ovo_padrao}</p><p>Essa linha é um comentário que indica que a substituição do</p><p>padrão antigo pelo novo padrão começa.</p><p>A linha</p><p>novo_nome_do_arquivo=${nome_do_arquivo//$padrao_antigo/$</p><p>Pedro Delfino - e-tinet.com - 22</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>novo_padrao} substitui o padrão antigo pelo novo padrão no</p><p>nome do arquivo usando a substituição de padrão do shell. O</p><p>novo nome do arquivo é armazenado na variável</p><p>novo_nome_do_arquivo.</p><p># Renomeia o arquivo</p><p>mv "$arquivo"</p><p>"$caminho_do_diretorio/$novo_nome_do_arquivo"</p><p>done</p><p>Essa linha é um comentário que indica que a renomeação do</p><p>arquivo começa.</p><p>A linha mv "$arquivo"</p><p>"$caminho_do_diretorio/$novo_nome_do_arquivo" renomeia o</p><p>arquivo para o novo nome usando o comando mv. O novo nome</p><p>do arquivo é especificado como</p><p>$caminho_do_diretorio/$novo_nome_do_arquivo.</p><p>O loop for termina com a palavra-chave done, e o script termina.</p><p>Pedro Delfino - e-tinet.com - 23</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Remover arquivos com mais de</p><p>um mês de idade</p><p>#!/bin/bash</p><p># Define o caminho do diretório que contém os arquivos</p><p>caminho_do_diretorio="caminho/para/diretorio"</p><p># Define a idade máxima do arquivo em dias</p><p>idade_maxima_em_dias=30</p><p># Loop através de cada arquivo no diretório</p><p>for arquivo in "$caminho_do_diretorio"/*; do</p><p># Obtém a data de modificação do arquivo em segundos</p><p>desde 01/01/1970</p><p>data_de_modificacao_em_segundos=$(stat -c %Y</p><p>"$arquivo")</p><p># Obtém a data atual em segundos desde 01/01/1970</p><p>data_atual_em_segundos=$(date +%s)</p><p># Calcula a diferença de tempo entre as datas em</p><p>segundos</p><p>diferenca_de_tempo_em_segundos=$((data_atual_em_segundos</p><p>- data_de_modificacao_em_segundos))</p><p># Calcula a idade do arquivo em dias</p><p>idade_do_arquivo_em_dias=$((diferenca_de_tempo_em_segundo</p><p>s / 86400))</p><p># Verifica se a idade do arquivo é maior que a idade</p><p>máxima permitida</p><p>if [ "$idade_do_arquivo_em_dias" -gt</p><p>"$idade_maxima_em_dias" ]; then</p><p># Remove o arquivo</p><p>rm "$arquivo"</p><p>Pedro Delfino - e-tinet.com - 24</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar</p><p>sistema</p><p>echo "O arquivo $arquivo foi removido."</p><p>fi</p><p>done</p><p>Esse script começa definindo o caminho do diretório que</p><p>contém os arquivos a serem verificados e a idade máxima</p><p>permitida em dias. Em seguida, usa um loop for para percorrer</p><p>cada arquivo no diretório e verificar sua idade. Se a idade do</p><p>arquivo for maior que a idade máxima permitida, o script</p><p>remove o arquivo usando o comando rm.</p><p>Explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Define o caminho do diretório que contém os arquivos</p><p>caminho_do_diretorio="caminho/para/diretorio"</p><p># Define a idade máxima do arquivo em dias</p><p>idade_maxima_em_dias=30</p><p>A primeira linha #!/bin/bash define o interpretador a ser</p><p>utilizado, neste caso, o bash.</p><p>A segunda linha é um comentário que define o caminho do</p><p>diretório que contém os arquivos a serem verificados.</p><p>A terceira linha é um comentário que define a idade máxima</p><p>permitida em dias. Neste exemplo, definimos a idade máxima</p><p>como 30 dias.</p><p>Pedro Delfino - e-tinet.com - 25</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p># Loop através de cada arquivo no diretório</p><p>for arquivo in "$caminho_do_diretorio"/*; do</p><p>Essa linha é um comentário que indica que o loop começa.</p><p>A linha for arquivo in "$caminho_do_diretorio"/*; do usa um loop</p><p>for para percorrer cada arquivo no diretório especificado em</p><p>$caminho_do_diretorio.</p><p># Obtém a data de modificação do arquivo em segundos</p><p>desde 01/01/1970</p><p>data_de_modificacao_em_segundos=$(stat -c %Y</p><p>"$arquivo")</p><p>Essa linha é um comentário que indica que a obtenção da data</p><p>de modificação do arquivo começa.</p><p>A linha data_de_modificacao_em_segundos=$(stat -c %Y</p><p>"$arquivo") obtém a data de modificação do arquivo em</p><p>segundos desde 01/01/1970 usando o comando stat. O formato</p><p>%Y é usado para obter a data em segundos.</p><p># Calcula a diferença de tempo entre as datas em segundos</p><p>diferenca_de_tempo_em_segundos=$((data_atual_em_segundos</p><p>- data_de_modificacao_em_segundos))</p><p>Essa linha é um comentário que indica que o cálculo da</p><p>diferença de tempo entre as datas começa.</p><p>Pedro Delfino - e-tinet.com - 26</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>A linha</p><p>diferenca_de_tempo_em_segundos=$((data_atual_em_segundo</p><p>s - data_de_modificacao_em_segundos)) calcula a diferença de</p><p>tempo entre a data atual e a data de modificação do arquivo em</p><p>segundos.</p><p># Calcula a idade do arquivo em dias</p><p>idade_do_arquivo_em_dias=$((diferenca_de_tempo_em_segundo</p><p>s / 86400))</p><p>Essa linha é um comentário que indica que o cálculo da idade</p><p>do arquivo em dias começa.</p><p>A linha</p><p>idade_do_arquivo_em_dias=$((diferenca_de_tempo_em_segund</p><p>os / 86400)) calcula a idade do arquivo em dias, dividindo a</p><p>diferença de tempo em segundos por 86400, que é o número</p><p>de segundos em um dia.</p><p># Verifica se a idade do arquivo é maior que a idade</p><p>máxima permitida</p><p>if [ "$idade_do_arquivo_em_dias" -gt</p><p>"$idade_maxima_em_dias" ]; then</p><p>Essa linha é um comentário que indica que a verificação da</p><p>idade do arquivo começa.</p><p>Pedro Delfino - e-tinet.com - 27</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>A linha if [ "$idade_do_arquivo_em_dias" -gt</p><p>"$idade_maxima_em_dias" ]; then usa uma estrutura</p><p>condicional if para verificar se a idade do arquivo é maior que a</p><p>idade máxima permitida. Se a idade do arquivo for maior que a</p><p>idade máxima permitida, o bloco de código dentro do if será</p><p>executado.</p><p># Remove o arquivo</p><p>rm "$arquivo"</p><p>echo "O arquivo $arquivo foi removido."</p><p>fi</p><p>done</p><p>Se a condição do if for verdadeira, a linha rm "$arquivo" será</p><p>executada, o que removerá o arquivo usando o comando rm.</p><p>Em seguida, a linha echo "O arquivo $arquivo foi removido." será</p><p>executada, o que exibirá uma mensagem indicando que o</p><p>arquivo foi removido.</p><p>O loop for termina com a palavra-chave done, e o script termina.</p><p>Pedro Delfino - e-tinet.com - 28</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Converter todos os arquivos de</p><p>um diretório de um formato para</p><p>outro usando o programa</p><p>ffmpeg</p><p>#!/bin/bash</p><p># Define o caminho do diretório que contém os arquivos</p><p>caminho_do_diretorio="caminho/para/diretorio"</p><p># Define o formato de entrada dos arquivos</p><p>formato_de_entrada="mp4"</p><p># Define o formato de saída desejado</p><p>formato_de_saida="avi"</p><p># Loop através de cada arquivo no diretório com o formato</p><p>de entrada especificado</p><p>for arquivo in</p><p>"$caminho_do_diretorio"/*."$formato_de_entrada"; do</p><p># Define o nome do arquivo de saída</p><p>arquivo_de_saida="${arquivo%.$formato_de_entrada}.$format</p><p>o_de_saida"</p><p># Converte o arquivo usando o programa ffmpeg</p><p>ffmpeg -i "$arquivo" "$arquivo_de_saida"</p><p>echo "O arquivo $arquivo foi convertido para</p><p>$arquivo_de_saida."</p><p>done</p><p>Pedro Delfino - e-tinet.com - 29</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Esse script começa definindo o caminho do diretório que</p><p>contém os arquivos a serem convertidos, o formato de entrada</p><p>dos arquivos e o formato de saída desejado. Em seguida, usa um</p><p>loop for para percorrer cada arquivo no diretório com o formato</p><p>de entrada especificado e converte o arquivo usando o</p><p>programa ffmpeg.</p><p>Explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Define o caminho do diretório que contém os arquivos</p><p>caminho_do_diretorio="caminho/para/diretorio"</p><p># Define o formato de entrada dos arquivos</p><p>formato_de_entrada="mp4"</p><p># Define o formato de saída desejado</p><p>formato_de_saida="avi"</p><p>A primeira linha #!/bin/bash define o interpretador a ser</p><p>utilizado, neste caso, o bash.</p><p>A segunda linha é um comentário que define o caminho do</p><p>diretório que contém os arquivos a serem convertidos.</p><p>A terceira linha é um comentário que define o formato de</p><p>entrada dos arquivos. Neste exemplo, definimos o formato de</p><p>entrada como mp4.</p><p>Pedro Delfino - e-tinet.com - 30</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>A quarta linha é um comentário que define o formato de saída</p><p>desejado. Neste exemplo, definimos o formato de saída como</p><p>avi.</p><p># Loop através de cada arquivo no diretório com o formato de</p><p>entrada especificado</p><p>for arquivo in</p><p>"$caminho_do_diretorio"/*."$formato_de_entrada"; do</p><p>Essa linha é um comentário que indica que o loop começa.</p><p>A linha for arquivo in</p><p>"$caminho_do_diretorio"/*."$formato_de_entrada"; do usa um</p><p>loop for para percorrer cada arquivo no diretório especificado</p><p>em $caminho_do_diretorio com o formato de entrada</p><p>especificado em $formato_de_entrada.</p><p># Define o nome do arquivo de saída</p><p>arquivo_de_saida="${arquivo%.$formato_de_entrada}.$format</p><p>o_de_saida"</p><p>Essa linha é um comentário que indica que a definição do nome</p><p>do arquivo de saída começa.</p><p>A linha</p><p>arquivo_de_saida="${arquivo%.$formato_de_entrada}.$formato_</p><p>Pedro Delfino - e-tinet.com - 31</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>de_saida" define o nome do arquivo de saída substituindo a</p><p>extensão de arquivo de entrada por $formato_de_saida.</p><p># Converte o arquivo usando o programa ffmpeg</p><p>ffmpeg -i "$arquivo" "$arquivo_de_saida"</p><p>echo "O arquivo $arquivo foi convertido para</p><p>$arquivo_de_saida."</p><p>done</p><p>Essa linha é um comentário que indica que a conversão do</p><p>arquivo começa.</p><p>A linha `ffmpeg -i "$arquivo" "$arquivo_de_saida"` converte o</p><p>arquivo usando o programa `ffmpeg`, onde `-i "$arquivo"`</p><p>indica o arquivo de entrada e `"$arquivo_de_saida"` indica o</p><p>arquivo de saída.</p><p>A linha `echo "O arquivo $arquivo foi convertido para</p><p>$arquivo_de_saida."` exibe uma mensagem indicando que o</p><p>arquivo foi convertido.</p><p>O loop `for` termina com a palavra-chave</p><p>`done`, e o script</p><p>termina.</p><p>Pedro Delfino - e-tinet.com - 32</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Fazer backup de um diretório</p><p>em outro local usando o</p><p>comando rsync</p><p>#!/bin/bash</p><p># Define o caminho do diretório a ser backupado</p><p>caminho_do_diretorio="caminho/para/diretorio"</p><p># Define o caminho do diretório de backup</p><p>caminho_do_diretorio_de_backup="caminho/para/diretorio/de</p><p>/backup"</p><p># Faz backup do diretório usando o comando rsync</p><p>rsync -av "$caminho_do_diretorio"</p><p>"$caminho_do_diretorio_de_backup"</p><p>echo "Backup do diretório $caminho_do_diretorio</p><p>concluído."</p><p>Esse script começa definindo o caminho do diretório a ser</p><p>backupado e o caminho do diretório de backup. Em seguida,</p><p>usa o comando rsync para fazer backup do diretório.</p><p>Explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Define o caminho do diretório a ser backupado</p><p>caminho_do_diretorio="caminho/para/diretorio"</p><p># Define o caminho do diretório de backup</p><p>Pedro Delfino - e-tinet.com - 33</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>caminho_do_diretorio_de_backup="caminho/para/diretorio/de</p><p>/backup"</p><p>A segunda linha é um comentário que define o caminho do</p><p>diretório a ser backupado.</p><p>A terceira linha é um comentário que define o caminho do</p><p>diretório de backup.</p><p># Faz backup do diretório usando o comando rsync</p><p>rsync -av "$caminho_do_diretorio"</p><p>"$caminho_do_diretorio_de_backup"</p><p>echo "Backup do diretório $caminho_do_diretorio</p><p>concluído."</p><p>Essa linha é um comentário que indica que o backup do</p><p>diretório começa.</p><p>A linha rsync -av "$caminho_do_diretorio"</p><p>"$caminho_do_diretorio_de_backup" faz backup do diretório</p><p>usando o comando rsync. -av é usado para copiar o diretório de</p><p>forma recursiva e preservar as permissões, propriedades e data</p><p>de modificação. "$caminho_do_diretorio" é o diretório a ser</p><p>backupado e "$caminho_do_diretorio_de_backup" é o diretório</p><p>de backup.</p><p>A linha echo "Backup do diretório $caminho_do_diretorio</p><p>concluído." exibe uma mensagem indicando que o backup foi</p><p>concluído.</p><p>Pedro Delfino - e-tinet.com - 34</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>O script termina após o comando echo.</p><p>Pedro Delfino - e-tinet.com - 35</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Extrair o texto de um arquivo</p><p>PDF usando o programa</p><p>pdftotext</p><p>#!/bin/bash</p><p># Define o caminho do arquivo PDF</p><p>caminho_do_arquivo_pdf="caminho/para/arquivo.pdf"</p><p># Define o caminho do arquivo de texto de saída</p><p>caminho_do_arquivo_de_texto="caminho/para/arquivo.txt"</p><p># Extrai o texto do arquivo PDF usando o comando</p><p>pdftotext</p><p>pdftotext "$caminho_do_arquivo_pdf"</p><p>"$caminho_do_arquivo_de_texto"</p><p>echo "Texto do arquivo PDF extraído para</p><p>$caminho_do_arquivo_de_texto."</p><p>Esse script começa definindo o caminho do arquivo PDF e o</p><p>caminho do arquivo de texto de saída. Em seguida, usa o</p><p>comando pdftotext para extrair o texto do arquivo PDF.</p><p>Aqui está a explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Define o caminho do arquivo PDF</p><p>caminho_do_arquivo_pdf="caminho/para/arquivo.pdf"</p><p>Pedro Delfino - e-tinet.com - 36</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p># Define o caminho do arquivo de texto de saída</p><p>caminho_do_arquivo_de_texto="caminho/para/arquivo.txt"</p><p>A segunda linha é um comentário que define o caminho do</p><p>arquivo PDF.</p><p>A terceira linha é um comentário que define o caminho do</p><p>arquivo de texto de saída.</p><p># Extrai o texto do arquivo PDF usando o comando</p><p>pdftotext</p><p>pdftotext "$caminho_do_arquivo_pdf"</p><p>"$caminho_do_arquivo_de_texto"</p><p>echo "Texto do arquivo PDF extraído para</p><p>$caminho_do_arquivo_de_texto."</p><p>Essa linha é um comentário que indica que a extração de texto</p><p>do arquivo começa.</p><p>A linha pdftotext "$caminho_do_arquivo_pdf"</p><p>"$caminho_do_arquivo_de_texto" extrai o texto do arquivo PDF</p><p>usando o comando pdftotext. "$caminho_do_arquivo_pdf" é o</p><p>arquivo PDF e "$caminho_do_arquivo_de_texto" é o arquivo de</p><p>texto de saída.</p><p>A linha echo "Texto do arquivo PDF extraído para</p><p>$caminho_do_arquivo_de_texto." exibe uma mensagem</p><p>indicando que o texto foi extraído.</p><p>O script termina após o comando echo.</p><p>Pedro Delfino - e-tinet.com - 37</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Renomear vários arquivos em</p><p>um diretório</p><p>#!/bin/bash</p><p># Define o caminho do diretório que contém os arquivos</p><p>caminho_do_diretorio="caminho/para/diretorio"</p><p># Define o padrão antigo do nome dos arquivos</p><p>padrao_antigo="*.pdf"</p><p># Define o novo padrão do nome dos arquivos</p><p>novo_padrao="documento_*.pdf"</p><p># Renomeia os arquivos no diretório</p><p>for arquivo in "$caminho_do_diretorio"/$padrao_antigo; do</p><p>novo_nome="$(echo "$arquivo" | sed</p><p>"s/$padrao_antigo/$novo_padrao/")"</p><p>mv "$arquivo" "$novo_nome"</p><p>done</p><p>echo "Arquivos renomeados com sucesso."</p><p>Esse script começa definindo o caminho do diretório que</p><p>contém os arquivos a serem renomeados. Em seguida, define o</p><p>padrão antigo do nome dos arquivos e o novo padrão do nome</p><p>dos arquivos. Depois, usa um loop for para percorrer cada</p><p>arquivo no diretório e renomeá-lo.</p><p>Explicação linha a linha do script:</p><p>Pedro Delfino - e-tinet.com - 38</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>#!/bin/bash</p><p># Define o caminho do diretório que contém os arquivos</p><p>caminho_do_diretorio="caminho/para/diretorio"</p><p># Define o padrão antigo do nome dos arquivos</p><p>padrao_antigo="*.pdf"</p><p># Define o novo padrão do nome dos arquivos</p><p>novo_padrao="documento_*.pdf"</p><p>A segunda linha é um comentário que define o caminho do</p><p>diretório que contém os arquivos a serem renomeados.</p><p>A terceira linha é um comentário que define o padrão antigo do</p><p>nome dos arquivos.</p><p>A quarta linha é um comentário que define o novo padrão do</p><p>nome dos arquivos.</p><p># Renomeia os arquivos no diretório</p><p>for arquivo in "$caminho_do_diretorio"/$padrao_antigo; do</p><p>novo_nome="$(echo "$arquivo" | sed</p><p>"s/$padrao_antigo/$novo_padrao/")"</p><p>mv "$arquivo" "$novo_nome"</p><p>done</p><p>echo "Arquivos renomeados com sucesso."</p><p>Essa linha é um comentário que indica que a renomeação de</p><p>arquivos começa.</p><p>Pedro Delfino - e-tinet.com - 39</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>A linha for arquivo in "$caminho_do_diretorio"/$padrao_antigo;</p><p>do usa um loop for para percorrer cada arquivo no diretório que</p><p>corresponde ao padrão antigo do nome dos arquivos.</p><p>A linha novo_nome="$(echo "$arquivo" | sed</p><p>"s/$padrao_antigo/$novo_padrao/")" define o novo nome do</p><p>arquivo substituindo o padrão antigo pelo novo padrão usando</p><p>o comando sed.</p><p>A linha mv "$arquivo" "$novo_nome" renomeia o arquivo com o</p><p>novo nome.</p><p>A linha echo "Arquivos renomeados com sucesso." exibe uma</p><p>mensagem indicando que a renomeação foi concluída com</p><p>sucesso.</p><p>O script termina após o comando echo.</p><p>Pedro Delfino - e-tinet.com - 40</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Compactar arquivos em um</p><p>diretório</p><p>#!/bin/bash</p><p># Define o nome do arquivo compactado</p><p>nome_do_arquivo="arquivos.zip"</p><p># Define o caminho do diretório que contém os arquivos a</p><p>serem compactados</p><p>caminho_do_diretorio="caminho/para/diretorio"</p><p># Compacta os arquivos no diretório</p><p>zip -r "$nome_do_arquivo" "$caminho_do_diretorio"</p><p>echo "Arquivos compactados com sucesso em</p><p>$nome_do_arquivo."</p><p>Esse script começa definindo o nome do arquivo compactado e</p><p>o caminho do diretório que contém os arquivos</p><p>a serem</p><p>compactados. Em seguida, usa o comando zip para compactar</p><p>os arquivos no diretório.</p><p>Explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Define o nome do arquivo compactado</p><p>nome_do_arquivo="arquivos.zip"</p><p># Define o caminho do diretório que contém os arquivos a</p><p>serem compactados</p><p>Pedro Delfino - e-tinet.com - 41</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>caminho_do_diretorio="caminho/para/diretorio"</p><p>A segunda linha é um comentário que define o nome do</p><p>arquivo compactado.</p><p>A terceira linha é um comentário que define o caminho do</p><p>diretório que contém os arquivos a serem compactados.</p><p># Compacta os arquivos no diretório</p><p>zip -r "$nome_do_arquivo" "$caminho_do_diretorio"</p><p>echo "Arquivos compactados com sucesso em</p><p>$nome_do_arquivo."</p><p>Essa linha é um comentário que indica que a compactação de</p><p>arquivos começa.</p><p>A linha zip -r "$nome_do_arquivo" "$caminho_do_diretorio"</p><p>compacta os arquivos no diretório usando o comando zip. -r</p><p>significa que o comando deve compactar o diretório e seu</p><p>conteúdo recursivamente.</p><p>A linha echo "Arquivos compactados com sucesso em</p><p>$nome_do_arquivo." exibe uma mensagem indicando que a</p><p>compactação foi concluída com sucesso.</p><p>O script termina após o comando echo.</p><p>Pedro Delfino - e-tinet.com - 42</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Descompactar um arquivo em</p><p>um diretório</p><p>#!/bin/bash</p><p># Define o caminho do arquivo compactado</p><p>caminho_do_arquivo_compactado="caminho/para/arquivo.zip"</p><p># Define o caminho do diretório de saída</p><p>caminho_do_diretorio_de_saida="caminho/para/diretorio"</p><p># Descompacta o arquivo no diretório de saída</p><p>unzip "$caminho_do_arquivo_compactado" -d</p><p>"$caminho_do_diretorio_de_saida"</p><p>echo "Arquivo descompactado com sucesso em</p><p>$caminho_do_diretorio_de_saida."</p><p>Esse script começa definindo o caminho do arquivo</p><p>compactado e o caminho do diretório de saída. Em seguida, usa</p><p>o comando unzip para descompactar o arquivo no diretório de</p><p>saída.</p><p>Explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Define o caminho do arquivo compactado</p><p>caminho_do_arquivo_compactado="caminho/para/arquivo.zip"</p><p># Define o caminho do diretório de saída</p><p>caminho_do_diretorio_de_saida="caminho/para/diretorio"</p><p>Pedro Delfino - e-tinet.com - 43</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>A segunda linha é um comentário que define o caminho do</p><p>arquivo compactado.</p><p>A terceira linha é um comentário que define o caminho do</p><p>diretório de saída.</p><p># Descompacta o arquivo no diretório de saída</p><p>unzip "$caminho_do_arquivo_compactado" -d</p><p>"$caminho_do_diretorio_de_saida"</p><p>echo "Arquivo descompactado com sucesso em</p><p>$caminho_do_diretorio_de_saida."</p><p>Essa linha é um comentário que indica que a descompactação</p><p>de arquivos começa.</p><p>A linha unzip "$caminho_do_arquivo_compactado" -d</p><p>"$caminho_do_diretorio_de_saida" descompacta o arquivo no</p><p>diretório de saída usando o comando unzip. -d significa que o</p><p>comando deve extrair o conteúdo do arquivo compactado para</p><p>o diretório especificado.</p><p>A linha echo "Arquivo descompactado com sucesso em</p><p>$caminho_do_diretorio_de_saida." exibe uma mensagem</p><p>indicando que a descompactação foi concluída com sucesso.</p><p>O script termina após o comando echo.</p><p>Pedro Delfino - e-tinet.com - 44</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Verifica se o arquivo a ser</p><p>deletado existe antes de tentar</p><p>excluí-lo</p><p>#!/bin/bash</p><p># Define o nome do arquivo a ser deletado</p><p>nome_do_arquivo="arquivo_a_ser_deletado.txt"</p><p># Verifica se o arquivo existe</p><p>if [ -e "$nome_do_arquivo" ]</p><p>then</p><p># Deleta o arquivo</p><p>rm "$nome_do_arquivo"</p><p>echo "Arquivo $nome_do_arquivo deletado com sucesso."</p><p>else</p><p>echo "O arquivo $nome_do_arquivo não existe."</p><p>fi</p><p>Esse script começa definindo o nome do arquivo a ser deletado.</p><p>Em seguida, usa a condição if e o comando [ -e</p><p>"$nome_do_arquivo" ] para verificar se o arquivo existe. Se o</p><p>arquivo existir, o comando rm é usado para deletá-lo. Se o</p><p>arquivo não existir, uma mensagem é exibida informando que o</p><p>arquivo não existe.</p><p>Aqui está a explicação linha a linha do script modificado:</p><p>Pedro Delfino - e-tinet.com - 45</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>#!/bin/bash</p><p># Define o nome do arquivo a ser deletado</p><p>nome_do_arquivo="arquivo_a_ser_deletado.txt"</p><p>A segunda linha é um comentário que define o nome do</p><p>arquivo a ser deletado.</p><p># Verifica se o arquivo existe</p><p>if [ -e "$nome_do_arquivo" ]</p><p>then</p><p>Essa linha é um comentário que indica que a verificação do</p><p>arquivo começa.</p><p>A condição if verifica se o arquivo $nome_do_arquivo existe</p><p>usando o comando [ -e "$nome_do_arquivo" ].</p><p># Deleta o arquivo</p><p>rm "$nome_do_arquivo"</p><p>echo "Arquivo $nome_do_arquivo deletado com sucesso."</p><p>else</p><p>echo "O arquivo $nome_do_arquivo não existe."</p><p>fi</p><p>Se o arquivo existir, o comando rm é usado para deletá-lo, e uma</p><p>mensagem indicando que o arquivo foi excluído com sucesso é</p><p>exibida usando o comando echo. Se o arquivo não existir, uma</p><p>mensagem é exibida indicando que o arquivo não existe.</p><p>Pedro Delfino - e-tinet.com - 46</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>O script termina após o comando fi.</p><p>Pedro Delfino - e-tinet.com - 47</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Verifica se o diretório a ser</p><p>criado já existe antes de tentar</p><p>criá-lo</p><p>#!/bin/bash</p><p># Define o nome do diretório a ser criado</p><p>nome_do_diretorio="diretorio_a_ser_criado"</p><p># Verifica se o diretório já existe</p><p>if [ -d "$nome_do_diretorio" ]</p><p>then</p><p>echo "O diretório $nome_do_diretorio já existe."</p><p>else</p><p># Cria o diretório</p><p>mkdir "$nome_do_diretorio"</p><p>echo "Diretório $nome_do_diretorio criado com</p><p>sucesso."</p><p>fi</p><p>Esse script começa definindo o nome do diretório a ser criado.</p><p>Em seguida, usa a condição if e o comando [ -d</p><p>"$nome_do_diretorio" ] para verificar se o diretório já existe. Se o</p><p>diretório já existir, uma mensagem é exibida indicando que o</p><p>diretório já existe. Se o diretório não existir, o comando mkdir é</p><p>usado para criá-lo.</p><p>Aqui está a explicação linha a linha do script modificado:</p><p>Pedro Delfino - e-tinet.com - 48</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>#!/bin/bash</p><p># Define o nome do diretório a ser criado</p><p>nome_do_diretorio="diretorio_a_ser_criado"</p><p>A segunda linha é um comentário que define o nome do</p><p>diretório a ser criado.</p><p># Verifica se o diretório já existe</p><p>if [ -d "$nome_do_diretorio" ]</p><p>then</p><p>echo "O diretório $nome_do_diretorio já existe."</p><p>else</p><p>Essa linha é um comentário que indica que a verificação do</p><p>diretório começa.</p><p>A condição if verifica se o diretório $nome_do_diretorio já existe</p><p>usando o comando [ -d "$nome_do_diretorio" ].</p><p># Cria o diretório</p><p>mkdir "$nome_do_diretorio"</p><p>echo "Diretório $nome_do_diretorio criado com</p><p>sucesso."</p><p>fi</p><p>Se o diretório já existir, uma mensagem é exibida indicando que</p><p>o diretório já existe. Se o diretório não existir, o comando mkdir é</p><p>Pedro Delfino - e-tinet.com - 49</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>usado para criá-lo, e uma mensagem indicando que o diretório</p><p>foi criado com sucesso é exibida usando o comando echo.</p><p>O script termina após o comando fi.</p><p>Pedro Delfino - e-tinet.com - 50</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar</p><p>sistema</p><p>Verifica o uso de CPU e memória</p><p>#!/bin/bash</p><p># Define a data e hora atual</p><p>data_hora=$(date +'%Y-%m-%d %H:%M:%S')</p><p># Obtém a porcentagem de uso da CPU</p><p>uso_cpu=$(top -b -n 1 | grep "Cpu(s)" | awk '{print $2 +</p><p>$4}')</p><p># Obtém a porcentagem de uso de memória</p><p>uso_mem=$(free | awk 'NR==2{printf "%.2f\n", $3*100/$2</p><p>}')</p><p># Exibe as informações de uso de CPU e memória</p><p>echo "Data e hora: $data_hora"</p><p>echo "Uso de CPU: $uso_cpu%"</p><p>echo "Uso de memória: $uso_mem%"</p><p>Aqui está a explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Define a data e hora atual</p><p>data_hora=$(date +'%Y-%m-%d %H:%M:%S')</p><p>A segunda linha define uma variável data_hora que armazena a</p><p>data e hora atual usando o comando date com a opção</p><p>+'%Y-%m-%d %H:%M:%S' para formatar a data e hora.</p><p>Pedro Delfino - e-tinet.com - 51</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p># Obtém a porcentagem de uso da CPU</p><p>uso_cpu=$(top -b -n 1 | grep "Cpu(s)" | awk '{print $2 +</p><p>$4}')</p><p>Essa linha define uma variável uso_cpu que obtém a</p><p>porcentagem de uso da CPU usando o comando top com as</p><p>opções -b e -n 1 para executar o comando uma única vez em</p><p>modo batch, o comando grep "Cpu(s)" para filtrar a linha que</p><p>contém informações de uso da CPU, e o comando awk '{print $2</p><p>+ $4}' para extrair a soma dos valores de uso da CPU (usuário e</p><p>sistema).</p><p># Obtém a porcentagem de uso de memória</p><p>uso_mem=$(free | awk 'NR==2{printf "%.2f\n", $3*100/$2</p><p>}')</p><p>Essa linha define uma variável uso_mem que obtém a</p><p>porcentagem de uso de memória usando o comando free e o</p><p>comando awk 'NR==2{printf "%.2f\n", $3*100/$2 }' para extrair a</p><p>porcentagem de uso de memória.</p><p># Exibe as informações de uso de CPU e memória</p><p>echo "Data e hora: $data_hora"</p><p>echo "Uso de CPU: $uso_cpu%"</p><p>echo "Uso de memória: $uso_mem%"</p><p>Pedro Delfino - e-tinet.com - 52</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Essas linhas exibem as informações de uso de CPU e memória</p><p>usando o comando echo. A primeira linha exibe a data e hora</p><p>atual armazenada na variável data_hora, a segunda linha exibe a</p><p>porcentagem de uso da CPU armazenada na variável uso_cpu, e</p><p>a terceira linha exibe a porcentagem de uso de memória</p><p>armazenada na variável uso_mem.</p><p>Pedro Delfino - e-tinet.com - 53</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Gerar um relatório do espaço em</p><p>disco</p><p>#!/bin/bash</p><p># Define o diretório a ser verificado</p><p>dir_verificado="/home/usuario"</p><p># Define o arquivo de saída para o relatório</p><p>arquivo_saida="relatorio_espaco_disco.txt"</p><p># Verifica o espaço em disco para o diretório</p><p>especificado</p><p>espaco_em_disco=$(du -sh $dir_verificado)</p><p># Cria o arquivo de saída e escreve o relatório nele</p><p>echo "Relatório de espaço em disco para o diretório</p><p>$dir_verificado" > $arquivo_saida</p><p>echo " " >> $arquivo_saida</p><p>echo "Espaço em disco utilizado: $espaco_em_disco" >></p><p>$arquivo_saida</p><p>echo " " >> $arquivo_saida</p><p>echo "Arquivos e diretórios ordenados por tamanho:" >></p><p>$arquivo_saida</p><p>echo " " >> $arquivo_saida</p><p>du -ah $dir_verificado | sort -hr >> $arquivo_saida</p><p># Exibe a mensagem de conclusão do script</p><p>echo "Relatório gerado com sucesso em $arquivo_saida."</p><p>Aqui está a explicação linha a linha do script:</p><p>Pedro Delfino - e-tinet.com - 54</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>#!/bin/bash</p><p># Define o diretório a ser verificado</p><p>dir_verificado="/home/usuario"</p><p>A segunda linha define a variável dir_verificado que especifica o</p><p>diretório a ser verificado.</p><p># Define o arquivo de saída para o relatório</p><p>arquivo_saida="relatorio_espaco_disco.txt"</p><p>Essa linha define a variável arquivo_saida que especifica o nome</p><p>do arquivo de saída para o relatório.</p><p># Verifica o espaço em disco para o diretório</p><p>especificado</p><p>espaco_em_disco=$(du -sh $dir_verificado)</p><p>Essa linha define a variável espaco_em_disco que verifica o</p><p>espaço em disco utilizado pelo diretório especificado usando o</p><p>comando du com as opções -sh.</p><p># Cria o arquivo de saída e escreve o relatório nele</p><p>echo "Relatório de espaço em disco para o diretório</p><p>$dir_verificado" > $arquivo_saida</p><p>echo " " >> $arquivo_saida</p><p>echo "Espaço em disco utilizado: $espaco_em_disco" >></p><p>$arquivo_saida</p><p>echo " " >> $arquivo_saida</p><p>Pedro Delfino - e-tinet.com - 55</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>echo "Arquivos e diretórios ordenados por tamanho:" >></p><p>$arquivo_saida</p><p>echo " " >> $arquivo_saida</p><p>du -ah $dir_verificado | sort -hr >> $arquivo_saida</p><p>Essas linhas criam o arquivo de saída especificado na variável</p><p>arquivo_saida e escrevem o relatório nele. A primeira linha</p><p>escreve a linha de título do relatório, a segunda linha escreve</p><p>uma linha em branco, a terceira linha escreve a linha com a</p><p>informação de espaço em disco utilizado, a quarta linha escreve</p><p>outra linha em branco, a quinta linha escreve a linha de título</p><p>para os arquivos e diretórios ordenados por tamanho, e a sexta</p><p>linha escreve os arquivos e diretórios ordenados por tamanho</p><p>usando o comando du com as opções -ah e o comando sort</p><p>com as opções -hr.</p><p>Pedro Delfino - e-tinet.com - 56</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Verificar log de erros</p><p>#!/bin/bash</p><p># Define o diretório de logs a ser verificado</p><p>dir_logs="/var/log"</p><p># Define o arquivo de saída para o relatório</p><p>arquivo_saida="relatorio_erros.txt"</p><p># Cria uma lista de arquivos de log com base em um padrão</p><p>de nome</p><p>lista_logs=$(ls $dir_logs/*error*)</p><p># Verifica o conteúdo de cada arquivo de log e grava</p><p>erros em um arquivo de saída</p><p>for arquivo_log in $lista_logs</p><p>do</p><p>if grep -q "error" $arquivo_log; then</p><p>echo "Erros encontrados no arquivo $arquivo_log:"</p><p>>> $arquivo_saida</p><p>echo " " >> $arquivo_saida</p><p>grep "error" $arquivo_log >> $arquivo_saida</p><p>echo " " >> $arquivo_saida</p><p>fi</p><p>done</p><p># Exibe a mensagem de conclusão do script</p><p>echo "Verificação de logs de erros concluída. Relatório</p><p>gerado em $arquivo_saida."</p><p>Aqui está a explicação linha a linha do script:</p><p>Pedro Delfino - e-tinet.com - 57</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>#!/bin/bash</p><p># Define o diretório de logs a ser verificado</p><p>dir_logs="/var/log"</p><p>A segunda linha define a variável dir_logs que especifica o</p><p>diretório de logs a ser verificado.</p><p># Define o arquivo de saída para o relatório</p><p>arquivo_saida="relatorio_erros.txt"</p><p>Essa linha define a variável arquivo_saida que especifica o nome</p><p>do arquivo de saída para o relatório de erros.</p><p># Cria uma lista de arquivos de log com base em um padrão</p><p>de nome</p><p>lista_logs=$(ls $dir_logs/*error*)</p><p>Essa linha define a variável lista_logs que cria uma lista de</p><p>arquivos de log no diretório de logs especificado com base em</p><p>um padrão de nome que contém a palavra "error".</p><p># Verifica o conteúdo de cada arquivo de log e grava</p><p>erros em um arquivo de saída</p><p>for arquivo_log in $lista_logs</p><p>do</p><p>if grep -q "error" $arquivo_log; then</p><p>Pedro Delfino - e-tinet.com - 58</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>echo "Erros encontrados no arquivo $arquivo_log:"</p><p>>> $arquivo_saida</p><p>echo " " >> $arquivo_saida</p><p>grep "error" $arquivo_log >> $arquivo_saida</p><p>echo " " >> $arquivo_saida</p><p>fi</p><p>done</p><p>Essas linhas criam um loop for que verifica o conteúdo de cada</p><p>arquivo de log na lista de arquivos de log criada anteriormente.</p><p>Se o arquivo de log contém a palavra "error", o script escreve o</p><p>nome do arquivo de log e os erros encontrados no arquivo de</p><p>saída especificado</p><p>na variável arquivo_saida.</p><p># Exibe a mensagem de conclusão do script</p><p>echo "Verificação de logs de erros concluída. Relatório</p><p>gerado em $arquivo_saida."</p><p>Esta linha exibe uma mensagem informando que a verificação</p><p>de logs de erros foi concluída e especifica o nome do arquivo de</p><p>saída gerado.</p><p>Pedro Delfino - e-tinet.com - 59</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Script Bash para monitorar</p><p>serviços</p><p>#!/bin/bash</p><p># Define a lista de serviços a serem monitorados</p><p>servicos=("ssh" "apache2" "mysql")</p><p># Define o tempo de espera entre cada verificação de</p><p>serviço (em segundos)</p><p>tempo_espera=60</p><p># Loop infinito para monitorar os serviços</p><p>while true</p><p>do</p><p>for servico in "${servicos[@]}"</p><p>do</p><p># Verifica se o serviço está em execução</p><p>if systemctl is-active $servico >/dev/null 2>&1;</p><p>then</p><p>echo "O serviço $servico está em execução."</p><p>else</p><p># Se o serviço não estiver em execução, tenta</p><p>reiniciá-lo</p><p>echo "O serviço $servico não está em</p><p>execução. Tentando reiniciar..."</p><p>systemctl start $servico >/dev/null 2>&1</p><p># Verifica se o serviço foi reiniciado com</p><p>sucesso</p><p>if systemctl is-active $servico >/dev/null</p><p>2>&1; then</p><p>echo "O serviço $servico foi reiniciado</p><p>com sucesso."</p><p>Pedro Delfino - e-tinet.com - 60</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>else</p><p>echo "Falha ao reiniciar o serviço</p><p>$servico."</p><p>fi</p><p>fi</p><p>done</p><p># Aguarda o tempo de espera antes de verificar</p><p>novamente</p><p>sleep $tempo_espera</p><p>done</p><p>Aqui está a explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Define a lista de serviços a serem monitorados</p><p>servicos=("ssh" "apache2" "mysql")</p><p>A segunda linha define a variável servicos que especifica a lista</p><p>de serviços a serem monitorados.</p><p># Define o tempo de espera entre cada verificação de</p><p>serviço (em segundos)</p><p>tempo_espera=60</p><p>Essa linha define a variável tempo_espera que especifica o</p><p>tempo de espera (em segundos) entre cada verificação de</p><p>serviço.</p><p>Pedro Delfino - e-tinet.com - 61</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p># Loop infinito para monitorar os serviços</p><p>while true</p><p>do</p><p>for servico in "${servicos[@]}"</p><p>do</p><p># Verifica se o serviço está em execução</p><p>if systemctl is-active $servico >/dev/null 2>&1;</p><p>then</p><p>echo "O serviço $servico está em execução."</p><p>else</p><p># Se o serviço não estiver em execução, tenta</p><p>reiniciá-lo</p><p>echo "O serviço $servico não está em</p><p>execução. Tentando reiniciar..."</p><p>systemctl start $servico >/dev/null 2>&1</p><p># Verifica se o serviço foi reiniciado com</p><p>sucesso</p><p>if systemctl is-active $servico >/dev/null</p><p>2>&1; then</p><p>echo "O serviço $servico foi reiniciado</p><p>com sucesso."</p><p>else</p><p>echo "Falha ao reiniciar o serviço</p><p>$servico."</p><p>fi</p><p>fi</p><p>done</p><p># Aguarda o tempo de espera antes de verificar</p><p>novamente</p><p>sleep $tempo_espera</p><p>done</p><p>Pedro Delfino - e-tinet.com - 62</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Essas linhas criam um loop infinito while true que executa a</p><p>verificação de serviço indefinidamente. Para cada serviço na lista</p><p>servicos, o script verifica se o serviço está em execução usando o</p><p>comando systemctl is-active $servico. Se o serviço não estiver</p><p>em execução, o script tenta reiniciá-lo usando o comando</p><p>systemctl start $servico.</p><p>Pedro Delfino - e-tinet.com - 63</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Bash para instalar pacotes</p><p>automaticamente</p><p>#!/bin/bash</p><p># Define a lista de pacotes a serem instalados</p><p>pacotes=("apache2" "mysql-server" "php" "git")</p><p># Verifica se o usuário tem permissões de root</p><p>if [[ $EUID -ne 0 ]]; then</p><p>echo "Este script precisa ser executado como root."</p><p>exit 1</p><p>fi</p><p># Loop para instalar os pacotes</p><p>for pacote in "${pacotes[@]}"</p><p>do</p><p># Verifica se o pacote já está instalado</p><p>if dpkg -s $pacote >/dev/null 2>&1; then</p><p>echo "O pacote $pacote já está instalado."</p><p>else</p><p># Se o pacote não estiver instalado, tenta</p><p>instalá-lo</p><p>echo "O pacote $pacote não está instalado.</p><p>Tentando instalar..."</p><p>apt-get -y install $pacote >/dev/null 2>&1</p><p># Verifica se o pacote foi instalado com sucesso</p><p>if dpkg -s $pacote >/dev/null 2>&1; then</p><p>echo "O pacote $pacote foi instalado com</p><p>sucesso."</p><p>else</p><p>echo "Falha ao instalar o pacote $pacote."</p><p>fi</p><p>Pedro Delfino - e-tinet.com - 64</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>fi</p><p>done</p><p>Aqui está a explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Define a lista de pacotes a serem instalados</p><p>pacotes=("apache2" "mysql-server" "php" "git")</p><p>A segunda linha define a variável pacotes que especifica a lista</p><p>de pacotes a serem instalados.</p><p># Verifica se o usuário tem permissões de root</p><p>if [[ $EUID -ne 0 ]]; then</p><p>echo "Este script precisa ser executado como root."</p><p>exit 1</p><p>fi</p><p>Essa parte verifica se o usuário tem permissões de root para</p><p>executar o script. Se o usuário não for root, uma mensagem de</p><p>erro será exibida e o script será encerrado.</p><p># Loop para instalar os pacotes</p><p>for pacote in "${pacotes[@]}"</p><p>do</p><p># Verifica se o pacote já está instalado</p><p>Pedro Delfino - e-tinet.com - 65</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>if dpkg -s $pacote >/dev/null 2>&1; then</p><p>echo "O pacote $pacote já está instalado."</p><p>else</p><p># Se o pacote não estiver instalado, tenta</p><p>instalá-lo</p><p>echo "O pacote $pacote não está instalado.</p><p>Tentando instalar..."</p><p>apt-get -y install $pacote >/dev/null 2>&1</p><p># Verifica se o pacote foi instalado com sucesso</p><p>if dpkg -s $pacote >/dev/null 2>&1; then</p><p>echo "O pacote $pacote foi instalado com</p><p>sucesso."</p><p>else</p><p>echo "Falha ao instalar o pacote $pacote."</p><p>fi</p><p>fi</p><p>done</p><p>Essas linhas criam um loop que instala automaticamente os</p><p>pacotes especificados na lista pacotes. Para cada pacote na lista</p><p>pacotes, o script verifica se o pacote já está instalado usando o</p><p>comando dpkg -s $pacote. Se o pacote já estiver instalado, uma</p><p>mensagem será exibida informando que o pacote já está</p><p>instalado. Caso contrário, o script tentará instalar o pacote</p><p>usando o comando apt-get -y install $pacote. A opção -y é</p><p>usada para confirmar automaticamente a instalação do pacote</p><p>sem a necessidade de interação do usuário.</p><p>Após a tentativa de instalação do pacote, o script verifica se o</p><p>pacote foi instalado com sucesso usando novamente o</p><p>Pedro Delfino - e-tinet.com - 66</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>comando dpkg -s $pacote. Se o pacote foi instalado com</p><p>sucesso, uma mensagem será exibida informando que o pacote</p><p>foi instalado com sucesso. Caso contrário, uma mensagem de</p><p>erro será exibida informando que houve falha na instalação do</p><p>pacote.</p><p>Este script é útil para automatizar o processo de instalação de</p><p>pacotes em sistemas Linux, tornando mais fácil e rápido a</p><p>configuração de novas máquinas ou a atualização de pacotes</p><p>em sistemas existentes. É importante lembrar que esse script foi</p><p>escrito para uso educacional e pode não ser apropriado para</p><p>ambientes de produção, uma vez que não oferece tratamento</p><p>apropriado para erros e não implementa medidas de segurança.</p><p>Pedro Delfino - e-tinet.com - 67</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Gerenciar arquivos duplicados</p><p>#!/bin/bash</p><p># Define o diretório a ser verificado</p><p>dir_verificacao=/home/usuario/pasta</p><p># Cria uma lista de arquivos duplicados</p><p>arquivos_duplicados=$(find $dir_verificacao -type f</p><p>-printf '%s\n' | sort -rn | uniq -d | xargs -I{} -n1 find</p><p>$dir_verificacao</p><p>-type f -size {}c)</p><p># Verifica se existem arquivos duplicados</p><p>if [ -z "$arquivos_duplicados" ]; then</p><p>echo "Não foram encontrados arquivos duplicados em</p><p>$dir_verificacao."</p><p>exit 0</p><p>else</p><p>echo "Foram encontrados arquivos duplicados em</p><p>$dir_verificacao:"</p><p>echo "$arquivos_duplicados"</p><p>fi</p><p># Loop para tratar os arquivos duplicados</p><p>while true; do</p><p>echo "Deseja excluir os arquivos duplicados? (S/N)"</p><p>read resposta</p><p>case $resposta in</p><p>[Ss]* )</p><p># Exclui os arquivos duplicados</p><p>echo "Excluindo os arquivos duplicados..."</p><p>echo "$arquivos_duplicados" | xargs rm</p><p>echo "Arquivos duplicados excluídos com</p><p>sucesso."</p><p>break;;</p><p>Pedro Delfino - e-tinet.com - 68</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>[Nn]* )</p><p>echo "Arquivos duplicados não foram</p><p>excluídos."</p><p>break;;</p><p>* ) echo "Por favor, responda com 'S' para Sim ou</p><p>'N' para Não.";;</p><p>esac</p><p>done</p><p>Aqui está a explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Define o diretório a ser verificado</p><p>dir_verificacao=/home/usuario/pasta</p><p>A segunda linha define a variável dir_verificacao que especifica o</p><p>diretório a ser verificado em busca de arquivos duplicados.</p><p># Cria uma lista de arquivos duplicados</p><p>arquivos_duplicados=$(find $dir_verificacao -type f</p><p>-printf '%s\n' | sort -rn | uniq -d | xargs -I{} -n1 find</p><p>$dir_verificacao -type f -size {}c)</p><p>Essa parte do script usa o comando find para encontrar todos os</p><p>arquivos no diretório especificado. Em seguida, usa os</p><p>comandos sort e uniq para encontrar os arquivos duplicados, e o</p><p>comando xargs para criar uma lista de arquivos duplicados. A</p><p>Pedro Delfino - e-tinet.com - 69</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>variável arquivos_duplicados armazena a lista de arquivos</p><p>duplicados.</p><p># Verifica se existem arquivos duplicados</p><p>if [ -z "$arquivos_duplicados" ]; then</p><p>echo "Não foram encontrados arquivos duplicados em</p><p>$dir_verificacao."</p><p>exit 0</p><p>else</p><p>echo "Foram encontrados arquivos duplicados em</p><p>$dir_verificacao:"</p><p>echo "$arquivos_duplicados"</p><p>fi</p><p>Essa parte do script verifica se existem arquivos duplicados. Se</p><p>não houver arquivos duplicados, uma mensagem será exibida</p><p>informando que nenhum arquivo duplicado foi encontrado e o</p><p>script será encerrado. Caso contrário, uma mensagem será</p><p>exibida informando que foram encontrados arquivos duplicados</p><p>e a lista de arquivos duplicados será exibida.</p><p># Loop para tratar os arquivos duplicados</p><p>while true; do</p><p>echo "Deseja excluir os arquivos duplicados? (S/N)"</p><p>read resposta</p><p>case $resposta in</p><p>[Ss]* )</p><p># Exclui os arquivos duplicados</p><p>Pedro Delfino - e-tinet.com - 70</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>echo "Excluindo os arquivos duplicados..."</p><p>echo "$arquivos_duplicados" | xargs rm</p><p>echo "Arquivos duplicados excluídos com sucesso."</p><p>break;;</p><p>[Nn]* )</p><p>echo "Arquivos duplicados não foram excluídos."</p><p>break;;</p><p>* ) echo "Por favor, responda com 'S' para Sim ou 'N'</p><p>para Não.";;</p><p>esac</p><p>done</p><p>Essa parte do script usa um loop para perguntar ao usuário se</p><p>deseja excluir os arquivos duplicados encontrados. Se a resposta</p><p>for "S" ou "s", os arquivos duplicados serão excluídos usando o</p><p>comando `rm` e uma mensagem será exibida informando que</p><p>os arquivos foram excluídos com sucesso. Se a resposta for "N"</p><p>ou "n", os arquivos duplicados não serão excluídos e uma</p><p>mensagem será exibida informando que os arquivos não foram</p><p>excluídos. Se a resposta for outra, uma mensagem será exibida</p><p>pedindo que o usuário responda com "S" ou "N".</p><p>Esse script é útil para gerenciar arquivos duplicados em</p><p>sistemas de arquivos grandes e tornar mais fácil a tarefa de</p><p>limpeza de disco. É importante lembrar que esse script foi</p><p>escrito para uso educacional e pode não ser apropriado para</p><p>ambientes de produção, uma vez que não oferece tratamento</p><p>apropriado para erros e não implementa medidas de segurança.</p><p>Pedro Delfino - e-tinet.com - 71</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Gerenciar múltiplos usuários</p><p>#!/bin/bash</p><p># Loop para criar novos usuários</p><p>while true; do</p><p>echo "Deseja criar um novo usuário? (S/N)"</p><p>read resposta</p><p>case $resposta in</p><p>[Ss]* )</p><p>echo "Digite o nome do novo usuário:"</p><p>read nome_usuario</p><p>echo "Criando novo usuário $nome_usuario..."</p><p>sudo useradd $nome_usuario</p><p>echo "Usuário $nome_usuario criado com</p><p>sucesso."</p><p>echo "Digite uma senha para o usuário</p><p>$nome_usuario:"</p><p>sudo passwd $nome_usuario</p><p>echo "Senha definida com sucesso para o</p><p>usuário $nome_usuario."</p><p>;;</p><p>[Nn]* )</p><p>echo "Nenhum novo usuário criado."</p><p>break;;</p><p>* ) echo "Por favor, responda com 'S' para Sim ou</p><p>'N' para Não.";;</p><p>esac</p><p>done</p><p># Loop para excluir usuários existentes</p><p>while true; do</p><p>echo "Deseja excluir um usuário existente? (S/N)"</p><p>read resposta</p><p>case $resposta in</p><p>Pedro Delfino - e-tinet.com - 72</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>[Ss]* )</p><p>echo "Digite o nome do usuário a ser</p><p>excluído:"</p><p>read nome_usuario</p><p>echo "Excluindo usuário $nome_usuario..."</p><p>sudo userdel -r $nome_usuario</p><p>echo "Usuário $nome_usuario excluído com</p><p>sucesso."</p><p>;;</p><p>[Nn]* )</p><p>echo "Nenhum usuário excluído."</p><p>break;;</p><p>* ) echo "Por favor, responda com 'S' para Sim ou</p><p>'N' para Não.";;</p><p>esac</p><p>done</p><p># Lista os usuários existentes</p><p>echo "Usuários existentes no sistema:"</p><p>cat /etc/passwd | cut -d: -f1</p><p>Aqui está a explicação linha a linha do script:</p><p>#!/bin/bash</p><p># Loop para criar novos usuários</p><p>while true; do</p><p>echo "Deseja criar um novo usuário? (S/N)"</p><p>read resposta</p><p>case $resposta in</p><p>[Ss]* )</p><p>echo "Digite o nome do novo usuário:"</p><p>read nome_usuario</p><p>echo "Criando novo usuário $nome_usuario..."</p><p>Pedro Delfino - e-tinet.com - 73</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>sudo useradd $nome_usuario</p><p>echo "Usuário $nome_usuario criado com</p><p>sucesso."</p><p>echo "Digite uma senha para o usuário</p><p>$nome_usuario:"</p><p>sudo passwd $nome_usuario</p><p>echo "Senha definida com sucesso para o</p><p>usuário $nome_usuario."</p><p>;;</p><p>[Nn]* )</p><p>echo "Nenhum novo usuário criado."</p><p>break;;</p><p>* ) echo "Por favor, responda com 'S' para Sim ou</p><p>'N' para Não.";;</p><p>esac</p><p>done</p><p>Essa parte do script usa um loop para criar novos usuários. O</p><p>loop pergunta ao usuário se deseja criar um novo usuário, e se a</p><p>resposta for "S" ou "s", o script pede o nome do novo usuário e</p><p>usa o comando useradd para criá-lo. O script também pede</p><p>uma senha para o novo usuário usando o comando passwd.</p><p># Loop para excluir usuários existentes</p><p>while true; do</p><p>echo "Deseja excluir um usuário existente? (S/N)"</p><p>read resposta</p><p>case $resposta in</p><p>[Ss]* )</p><p>echo "Digite o nome do usuário a ser</p><p>excluído:"</p><p>read nome_usuario</p><p>echo "Excluindo usuário $nome_usuario..."</p><p>Pedro Delfino - e-tinet.com - 74</p><p>Licensed to Luiz Roberto Gomes - gomes_luiz@outlook.com</p><p>https://e-tinet.com/</p><p>50 Exemplos práticos de Shell Script para automatizar sistema</p><p>Verificação de integridade de</p><p>arquivos</p><p>#!/bin/bash</p><p># Diretório a ser verificado</p><p>DIR="/path/to/directory"</p><p># Arquivo de checksum</p><p>CHECKSUM_FILE="checksum.md5"</p><p># Verifica se o diretório existe</p><p>if [ ! -d $DIR ]; then</p><p>echo "O diretório $DIR não existe."</p><p>exit 1</p><p>fi</p><p># Verifica se o arquivo de checksum existe</p><p>if [ ! -f $DIR/$CHECKSUM_FILE ]; then</p><p>echo "O arquivo de checksum $CHECKSUM_FILE não existe</p><p>no diretório $DIR."</p><p>exit 1</p><p>fi</p><p># Calcula o checksum dos arquivos no diretório</p><p>echo "Calculando checksum dos arquivos no diretório</p><p>$DIR..."</p><p>cd $DIR</p><p>find . -type f -exec md5sum {} \; ></p><p>checksum_calculado.md5</p><p># Compara os checksums</p><p>echo "Comparando checksums..."</p><p>diff -q $CHECKSUM_FILE checksum_calculado.md5</p><p>Pedro Delfino - e-tinet.com - 75</p><p>Licensed to Luiz</p>