Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/carolinasfreitas/shellscript-studies
Estudando Shell Scripting através da Alura
https://github.com/carolinasfreitas/shellscript-studies
linux shellscript
Last synced: about 1 month ago
JSON representation
Estudando Shell Scripting através da Alura
- Host: GitHub
- URL: https://github.com/carolinasfreitas/shellscript-studies
- Owner: CarolinaSFreitas
- Created: 2024-01-12T13:59:52.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-01-19T18:41:08.000Z (10 months ago)
- Last Synced: 2024-01-20T19:04:09.995Z (10 months ago)
- Topics: linux, shellscript
- Language: Shell
- Homepage:
- Size: 56.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Estudando Shell Scripting através da Alura
### conversao-jpg-png.sh:
- Para rodar os scripts, o interpretador no terminal é o bash, então: ``bash ``.
- "$@" engloba todos os parâmetros em um laço for por exemplo: ``for image in $@``.
- "$1" ou "$2": um parâmetro ou dois a serem recebidos.
- No loop for do 'conversao-jpg-png.sh' é ``$imagem in $@`` para não limitar a quantidade de arquivos.
- Num cenário de execução automática do sh fica ``for imagem in *.jpg``.
- Em ``ls algoritmos.jpg | awk -F.`` o awk dividirá o nome do arquivo "algoritmos.jpg" em dois campos: "algoritmos" e "jpg". Esses campos podem ser referenciados no awk como $1 e $2, respectivamente.
- Com o if ``if [ ! -d png ] then mkdir png fi`` o script verifica se existe o diretório 'png' e o '!' assegura que, caso não existir, o diretório seja criado com o 'then'.
- Em sistemas Unix existem os descritores de arquivos(indicadores de acessos de arquivos e recursos de entrada e saída), então os fluxos padrões de entrada, saída e erro são representados por números:
**0 = entrada padrão | 1 = saída padrão | 2 = mensagens de erro padrão**
- **0 (stdin)**: Representa a entrada padrão. Este descritor de arquivo é associado geralmente ao teclado, e os programas podem ler dados da entrada padrão através dele.- **1 (stdout)**: Representa a saída padrão. Este descritor de arquivo é associado geralmente à tela, e os programas podem enviar dados para a saída padrão através dele.
- **2 (stderr)**: Representa a saída de erro padrão. Este descritor de arquivo também é associado geralmente à tela, e os programas podem enviar mensagens de erro ou diagnóstico para a saída de erro padrão através dele.
### processos-memoria.sh
- Em `` echo "$(bc <<<"scale=2;$tamanho_processo/1024") MB" >> log/$nome_processo.log `` o 'bc' faz o cálculo da divisão e o 'scale=2;' traz as duas casas decimais do resultado da divisão.----------------------------
### filtrando-resultado-apache.sh
- Comparando parâmetro com regex: ``[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}`` significa que os intervalos do IPv4 buscado no terminal podem ter 3 algarismos de 0 até 9
- Podemos melhorar a nossa expressão regular. Se repararmos, o trecho [0-9]{1,3}. se repete por 3 vezes. Poderíamos simplesmente agrupar esse valor entre () e colocar um quantificador para dizer que a parte agrupada irá se repetir por 3 vezes:
``([0-9]{1,3}.){3}[0-9]{1,3}``
Para nos ajudar nessa verificação, utilizaremos o site regex101.com. Existem outros sites que também conseguem essa validação. Copiaremos a expressão criada, e vamos colar no campo REGULAR EXPRESSION nesse mesmo site. Depois, no campo TEST STRING, colocaremos o
endereço IP que havíamos testado: 192.168.1.10.
O site nos retornou 1 match, significa que o resultado ``([0-9]{1,3}.){3}[0-9]{1,3}`` teve um padrão aceito em nossa expressão regular. Vamos fazer o seguinte. Tentaremos trocar o ponto por uma vírgula. O site nos retorna algo diferente de antes? Não! Continua
sendo exibido 1 match!
Isso acontece porque colocamos o ponto em nossa expressão regular, porém não realizamos o escape dele, dizendo que literalmente a divisão entre esses intervalos precisa ser somente o ponto. Para dizer que somente o ponto é aceito para dividir esses intervalos,
colocamos a barra \ antes do ponto, assim nós o "escapamos".
Sempre que fazemos isso, estamos dizendo que a divisão entre os intervalos só pode ser o ponto! ``([0-9]{1,3}\.){3}[0-9]{1,3}``
Para testar, temos o endereço IP, podendo variar de um a três algarismos. Tentaremos colocar um algarismo a mais do permitido no final, a fim de testá-lo. Então, o endereço IP ficará assim: 192.168.1.1000.
Como podemos ver, esse endereço é compatível com a expressão regular. Ele só é compatível, porque o que está sendo considerado é somente 192.168.1.1000. Mas se o usuário digitar dessa forma no script (com um dígito a mais), o padrão seria aceito, o que não deveria acontecer. Sendo assim, é interessante colocarmos um delimitador, dizendo que nada no final ou no início pode existir!
O delimitador de palavras é o Word Boundary, simbolizado por \b. Adicionando esse delimitador nas extremidades da expressão, não será reconhecido nenhum algarismo que ultrapasse a quantidade de 3 por intervalo. ``\b([0-9]{1,3}\.){3}[0-9]{1,3}\b``
Bom, com isso, sabemos que o endereço IP 192.168.1.1000 não será aceito pois ele não está respeitando as regras da expressão.### filtro-requisicao.sh
- ``-eq`` (equal) compara valores inteiros
- Na estrutura ``case`` a verificação é feita pelo tipo de dado e o terminador(``;;``) vai nessa verificação. Ex. de valor do parâmetro: ``GET), POST), PUT), DELETE)``. O ``*)`` é como um else, qualquer outro parâmetro fora dos especificados na estrutura entram nesse.### monitora-servidor-apache.sh
- o ``curl`` pode verificar o conteúdo da página do localhost com o Apache e trazer o status HTTP para fazer a verificação do servidor
- O /dev/null é um arquivo especial que tem como objetivo descartar toda a informação de entrada. O arquivo null seria um arquivo especial do sistema que tem como objetivo descartar as informações que são repassadas a ele(ex.:``cat testando.txt 2> /dev/null``, que vai descartar as mensagens de erro do comando ``cat``
- O pacote "ssmtp" é um agente de transferência de correio simples (Simple Mail Transfer Protocol) no Linux, então ele enviará um e-mail do status do servidor HTTP da máquina p/ o e-mail do administrador do servidor(ou qqr outra opção desejada) - pode ser mais recomendável considerar alternativas mais modernas e seguras, como 'msmtp', 'postfix' ou 'sendmail'.
- Ao editar o arquivo de configuração do ssmtp (/etc/ssmtp/ssmtp.conf), será definido o e-mail agente que irá enviar os e-mails para o administrador
``
root=[seu e-mail]
mailhub=smtp.gmail.com:587
AuthUser=[seu e-mail]
AuthPass=[sua senha]
UseSTARTTLS=yes
``
- O pacote "mailutils" irá ajudar a de fato **enviar** o status do Apache por e-mail através do script
``mail -s "Problema no Servidor" [email protected]<`` faz o restore da tabela que está no S3 para o banco de dados----------------------
- `` chmod +x .sh ``
- `` ./.sh ``
- ``top`` para verificar os processos
- ``ps`` para ver os processos em execução.
- `` ps aux `` lista mais detalhada dos processos
- `` ps aux | grep -v grep nginx `` traz os processos do nginx sem contar o grep em si nessa busca
- `` pgrep nginx `` retorna os ids dos processos do nginx sem trazer o grep também
- `` pgrep nginx > /dev/null `` o resultado vai para o /dev/null
- `` pgrIp nginx &> /dev/null ``, apesar do comando estar digitado errado o "&" envia o erro para o /dev/null
-