Shell Script: Criando Programas Básicos

Linux

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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.