Jornada Shell Script: Parte 6 Criando Programas Básicos
Tema Central: Criação de programas básicos em Shell Script Linux
Versão 1
Emissão: 29 de julho de 2022
Validade: Indeterminada
Objetivo
No artigo de hoje, enfim, vamos exercitar nosso conhecimento em Shell Script, aplicando na prática todo conhecimento obtido até o momento na Jornada Shell Script da RunbookBR.
Então vamos criar programas que deverão interagir com o usuário, trabalhando com variáveis de ambiente no Linux, buscando informações do sistema e devolvendo para o usuários saídas de comandos pertinentes a rotina. Desse modo, iremos trabalhar essas saídas de informações de modo a entregar a melhor experiência possível para o usuário que está executando o programa em Shell Script.
Pré-Requisitos
Antes de mais nada, é importante que você compreenda, desde já, que expliquei nos artigos anteriores tudo o que apresentarei de conhecimento em comandos neste artigo de hoje. Sendo assim, faz-se necessário para melhor entendimento dos comandos apresentados aqui, a leitura dos artigos relacionados abaixo.
Shell Script: Parte 1 Comandos Essenciais: todos os comandos que usaremos neste artigo, apresentei e expliquei no artigo 1 da Jornada Shell Script da RunbookBR. Desse modo, qualquer necessidade de ajuda com a interpretação do comando, peço a gentileza de retornar ao referido.
Shell Script: Parte 2 REGEX Linux E Variáveis: como o próprio nome do artigo sugere, falamos bastante neste artigo sobre Variáveis de ambiente, file globbing e Expressões regulares. Exploraremos bastante esse tema neste artigo, sendo a leitura do artigo mencionado providencial para melhor aproveitamento do presente.
Shell Script: Parte 3 Meu Primeiro Programa: aqui começamos de fato a desenvolver nosso primeiro programa em Shell Script. Realizei na prática a execução de comandos. Trabalhamos alguns conceitos e boas práticas para que você inicie seu script e documente da maneira correta.
Além disso, a estrutura de arquivos e diretórios utilizada nesta etapa servirá como base para os programas que usaremos hoje no nosso artigo.
Shell Script: Parte 4 Exit Code STDOut E STDErr: na quarta parte desta Jornada, aprendemos a interpretar saídas de comandos, saídas de erros e status no Linux. Esse entendimento, demonstrei de maneira prática, sendo mais um item essencial para tratamento das condições que se apresentarão nas nossas rotinas em Shell Script.
Shell Script: Input, Variáveis de Entrada: por fim, na quinta parte desta Jornada mostramos como entrar com dados de usuários no Shell, seja de maneira interativa ou através de parametros do programa.
Ainda vamos precisar de uma máquina Linux para criação dos nossos scripts. Seguiremos usando o Debian como distribuição base.
Preparando o ambiente
Para criação dos nossos programas vamos acessar nossa máquina Linux via Putty ou console Shell.
Lembrando que vamos usar o bash como interpretador, então caso seu usuário seja iniciado com sh padrão ou outro interpretador, execute o comando bash após executar o login no sistema.
$ echo $0 sh $ bash myuser@DEVOPS:/$
Observe algumas situações na saída de comandos acima:
- Meu usuário iniciou a sessão com interpretador sh
- Percebo isso facilmente ao verificar que o meu shell inicia apenas com um sinal de dólar. Normalmente quando isso ocorre estamos trabalhando no interpretador sh. Para confirmar rodamos o comando “echo $0”.
- Obs.: Isso ocorreu (propositalmente) por que o sh é o interpretador padrão do meu usuário. No artigo 1 eu falo como alterar esse parâmetro.
- Na sequência alterei meu interpretador para o bash
- Agora percebo que meu usuário se chama: myuser
Essa informação é conhecida uma vez que o Linux, quando está no interpretador bash, por padrão, mostrará o nome do usuário antes do “@” (arroba). - Minha máquina se chama DEVOPS
Por outro lado, após o arroba, o Linux exibirá o nome da máquina, por padrão, quando trabalhamos com interpretador Bash
Agora vamos criar nossa estrutura de diretórios. Caso já exista, não se preocupe, nenhum dado será perdido pela execução do comando de criação de diretórios. Após a criação da árvore de diretórios, entre na pasta Scripts.
myuser@DEVOPS:/$ mkdir -p ~/RunbookBR/Scripts/ myuser@DEVOPS:~/RunbookBR/Scripts$ cd ~/RunbookBR/Scripts/ myuser@DEVOPS:~/RunbookBR/Scripts$
Caso você tenha executado todos os passos descritos no artigo 3 desta Jornada, você perceberá que seu diretório scripts já possui alguns arquivos criados. Não se preocupe com isso. Vamos gerar novos scripts, logo esses arquivos não irão nos atrapalhar.
myuser@DEVOPS:~/RunbookBR/Scripts$ ls BuscaClientes.sh ListaClientes.txt MeuPrimeiroScript.sh
Programa1: Bem-vindo ao Shell!
Vamos iniciar com um script padrão, que será montado de maneira estruturada conforme apresentado nos artigos passados e exibirá uma mensagem simples de “Bem-vindo ao Mundo Shell” para o usuário que executar o programa.
myuser@DEVOPS:~/RunbookBR/Scripts$ clear myuser@DEVOPS:~/RunbookBR/Scripts$ vi BemVindoAoShell.sh #!/bin/bash ############################### # Programa: MeuPrimeiroScript.sh # Desenvolvido por: RunbookBR ([email protected]) # Data de Criacao: 08/09/2020 # Versao: 1.0.0 # Comentario: Versão inicial do Primeiro Programa criado para treinamento de Shell Script ######## # Edicao # Editado por: RunbookBR ([email protected]) # Data de Criacao: 08/10/2020 # Versao: 1.0.1 # Comentario: Corrigida ortografia no texto de saida para o usuario ############################### #!/bin/bash ############################### # Programa: BemVindoAoShell.sh # Desenvolvido por: RunbookBR ([email protected]) # Data de Criacao: 18/09/2020 # Versao: 1.0.0 #!/bin/bash ############################### # Programa: BemVindoAoShell.sh # Desenvolvido por: RunbookBR ([email protected]) # Data de Criacao: 18/09/2020 # Versao: 1.0.0 # Comentario Programa criado para dar as boas vindas ao novo desenvolvedor Shell ############################# # VARIAVEIS DO PROGRAMA MSGM_OUTPUT="Bem-vindo ao Mundo Shell" # INICIO DO PROGRAMA clear #Limpa a tela do bash echo " ############################## Ola DevOps! $MSGM_OUTPUT ############################## " :wq
Agora vamos dar a permissão de execução no nosso programa para na sequência executá-lo.
myuser@DEVOPS:~/RunbookBR/Scripts$ chmod +x BemVindoAoShell.sh myuser@DEVOPS:~/RunbookBR/Scripts$ ./BemVindoAoShell.sh
Se a saída abaixo for apresentada, quer dizer que seu primeiro programa foi executado sem nenhum problema. Caso alguma coisa tenha ficado fora esperado, retorne ao início do artigo, se necessário revise os artigos anteriores, pois muito provavelmente alguma coisa não está aplicada corretamente.
Saída do Programa:
############################## Ola DevOps! Bem-vindo ao Mundo Shell ############################## myuser@DEVOPS:~/RunbookBR/Scripts$
Programa2: Somando Valores
Em seguida, para nosso segundo programa Shell Script, vamos usar um pouco mais de comandos. Ainda temos um programa bem simples que pegará dois valores variáveis que serão passados pelo usuário que irá executar o programa. Essas variáveis deverão ser numéricas para que o seu script possa somar esses valores e apresentar de forma amigável como saída para o usuário.
#!/bin/bash ############################### # Programa: SomandoValores.sh # Desenvolvido por: RunbookBR ([email protected]) # Data de Criacao: 18/09/2020 # Versao: 1.0.0 # Comentario Programa criado para dar as boas vindas ao novo desenvolvedor Shell ############################### # VARIAVEIS DO PROGRAMA ## VARIAVEIS DE INPUT read -p "Entre com um valor numerico: " VALNUM1 read -p "Entre com outro valor numerico para realizar a soma: " VALNUM2 ## VARIAVEIS DE OUTPUT SOMA=$(expr $VALNUM1 + $VALNUM2) MSGM_OUTPUT="Os valores somados sao: $SOMA Soma Realizada: $VALNUM1 + $VALNUM2 = $SOMA" # SAIDA DO PROGRAMA clear #Limpa a tela do bash echo " ############# $MSGM_OUTPUT ############# "
Do mesmo modo que no passo anterior, vamos garantir a permissão de execução do nosso programa para então executá-lo. Perceba que desta vez o shell irá interagir com você solicitando que você entre com informações para que o programa possa finalizar. Vou entrar com os valores 3 e 6 inicialmente para testar o programa.
myuser@DEVOPS:~/RunbookBR/Scripts$ chmod +x SomandoValores.sh myuser@DEVOPS:~/RunbookBR/Scripts$ ./SomandoValores.sh Entre com um valor numerico: 3 Entre com outro valor numerico para realizar a soma: 6
Caso a saída do comando esteja conforme abaixo, correu tudo bem com seu script. Fazer mais alguns testes antes de seguir para o próximo programa.
############# Os valores somados sao: 9 Soma Realizada: 3 + 6 = 9 ############# myuser@DEVOPS:~/RunbookBR/Scripts$
Programa3: Inventário no Linux
Para este programa, iremos solicitar ao nosso Script Shell que ele colete para nós informações referente ao nosso sistema operacional. Essa atividade é muito comum em ambientes de produção, onde o administrador de sistemas está buscando conhecer o parque de informática e em um cenário onde não existe uma ferramenta de inventário para os servidores que estão sendo analisados.
#!/bin/bash ############################## # Programa: InventarioNoLinux.sh # Desenvolvido por: RunbookBR ([email protected]) # Data de Criacao: 18/09/2020 # Versao: 1.0.0 # Comentario Programa criado para dar as boas vindas ao novo desenvolve dor Shell ############################### # VARIAVEIS DO PROGRAMA HOSTNAME=$(hostname) OSBASE=$(cat /etc/os-release | grep '^NAME=' | cut -d'=' -f2) OSVERSION=$(cat /etc/os-release | grep '^VERSION=') KERNEL=$(uname -r) CPUINFO=$(cat /proc/cpuinfo) CPUMODEL=$(echo "$CPUINFO" | grep '^model name' | cut -d':' -f2) CPUCORE=$(echo "$CPUINFO" | grep "^cpu cores" | cut -d':' -f2) MEM=$(free -h) MEMTOTAL=$(echo "$MEM" | awk -F' ' '{print $1,$2}' | grep Mem | cut -d':' -f2) MEMFREE=$(echo "$MEM" | awk -F' ' '{print $1,$4}' | grep Mem | cut -d':' -f2) SWAP=$(echo "$MEM" | awk -F' ' '{print $1,$2}' | grep Swap | cut -d':' -f2) DISKROOT=$(df -h /) DISKROOTTOTAL=$(echo "$DISKROOT" | grep '^/' | awk -F' ' '{print $2}') DISKROOTUSED=$(echo "$DISKROOT" | grep '^/' | awk -F' ' '{print $5}') UPTIME=$(uptime) # INICIO DO PROGRAMA clear #Limpa a tela do bash echo " ############## Inventario Linux RunbookBR ############## Hostname: $HOSTNAME OS Base: $OSBASE OS Version: $OSVERSION Kernel Linux: $KERNEL Modelo de CPU: $CPUMODEL Quantidade de CPU Cores: $CPUCORE RAM Total: $MEMTOTAL RAM Livre: $MEMFREE Swap configurado: $SWAP Tamanho da particao Raiz (/): $DISKROOTTOTAL Percentual de Particao Raiz (/) Utilizado: $DISKROOTUSED Tempo de Uptime do servidor: $UPTIME "
Nesse ponto já sabemos o que fazer. Permissão de execução e vamos rodar nosso programa.
myuser@DEVOPS:~/RunbookBR/Scripts$ chmod +x InventarioNoLinux.sh myuser@DEVOPS:~/RunbookBR/Scripts$ ./InventarioNoLinux.sh
Vamos ver se nossa saída de comandos se apresenta conforme o esperado. Espero que as informações básicas de inventário sejam apresentadas na tela do nosso sistema Linux
############## Inventario Linux RunbookBR ############## Hostname: DEVOPS OS Base: "Ubuntu" OS Version: VERSION="20.04.4 LTS (Focal Fossa)" Kernel Linux: 5.15.30-2-pve Modelo de CPU: Intel(R) Xeon(R) CPU E31270 @ 3.40GHz Quantidade de CPU Cores: 4 RAM Total: 512Mi RAM Livre: 382Mi Swap configurado: 64Mi Tamanho da particao Raiz (/): 2.0G Percentual de Particao Raiz (/) Utilizado: 54% Tempo de Uptime do servidor: 01:19:43 up 10 days myuser@DEVOPS:~/RunbookBR/Scripts$
Conclusão
Em suma, praticamos no artigo de hoje nossos comandos shell script e vimos na prática como criar alguns programas simples para automatização das nossas rotinas. Recomendo para você que vai seguir com a RunbookBR nessa Jornada, que pratique bastante os conceitos aplicados até aqui. Crie suas rotinas, por mais simples e básicas que pareçam. Ganhe familiaridade porque a partir do próximo artigo vamos esquentar as coisas, criando loopings, condicionais, funções e muita coisa legal para deixar nosso Shell Script bem montado e útil para automatização das nossas rotinas.
Conforme dito no outro artigo, estamos montando essa Jornada com bastante zelo para que você se torne, a partir do conhecimento obtido aqui, um especialista Linux, como enfase em shell script e diferenciado no mercado.
Até a próxima.