Shell Script: Input, Variáveis de Entrada

Linux

Jornada Shell Script: Parte 5 Input, Variáveis de Entrada

Tema Central: Entrada de valores (input) em variáveis no Shell Script, STDOin, em comandos do Linux

Versão 1

Emissão: 22 de julho de 2022

Validade: Indeterminada

Objetivo

No artigo de hoje, falaremos sobre o uso de parâmetros de entrada do usuário (Input) no shell script. A entrada de parâmetros em um programa é muito útil quando temos valores variáveis que queremos definir em tempo de execução de comandos. Por exemplo, imagine que temos um script que lê um arquivo e busca as informações completas de uma pessoa cujo sabemos apenas o seu CPF. Uma variável possível nesse cesário seria, entrar com o programa incluindo como parâmetro o número do CPF do cliente a cada vez que eu executar o programa. Desse modo, a cada execução não precisamos alterar o script. O programa receberá esse valor como parâmetro adicional.

Pré-Requisitos

Antes de seguir com este artigo, espero que você tenha lido e entendido os artigos anteriores desta jornada. Apresentamos até aqui muitas das informações importantes que tratarei como já conhecidos ao longo desta Jornada.

Vimos na primeira parte da Jornada Shell Script os comandos essenciais utilizados no Linux. Utilizaremos alguns destes comandos, assim como seus parâmetros neste artigo. Caso tenha alguma dúvida, recomendo que retorno para o artigo “Shell Script: parte 1 Comandos Essenciais“.

Depois, apresentei na parte 2 da Jornada as variáveis de ambiente, file globbing e Expressões regulares que servirão de base para todo material publicado relacionado a Shell Script. Ainda neste artigo, apresentei o editor de textos vi e seus comandos mais comuns.

Em seguida, no terceiro artigo da Jornada Shell Script da RunbookBR, te guiei passo a passo na construção do eu “Primeiro Programa Shell“. Continuaremos utilizando a estrutura de diretórios criada.

Por fim, vimos na parte 4 muita prática no tratamento da saída dos códigos de status dos comandos executados no Linux.

Assim como nos artigos citados, hoje, vamos precisar de uma máquina Linux para aplicação prática dos conceitos que irei apresentar. Conforme já sabemos, seguiremos com o Debian como distribuição base.

Variáveis de Entrada no Shell Script

Entradas de usuários através do shell são comumente utilizadas no Linux. Mas é importante que você entenda antes de mais nada que podemos trabalhar basicamente de duas formas:

Definição de variável a partir de parâmetros

A primeira forma que irei apresentar para definição de variáveis pelo usuário que está executando o programa é a partir de parâmetros adicionais que informamos no momento da execução do programa.

Por exemplo: digamos que temos uma lista de clientes e dessa lista de clientes você precisa fazer uma busca específica. Digamos que você não queira colocar muitas restrições para o usuário, deixando ele dar “um grep” simples no arquivo. Digamos ainda que nesse exemplo seus usuários não tenham conhecimento em Linux, estando restritos a executar apenas o que você determinar, por exemplo, o comando: “ConsultaClientes.sh DADO_DO_CLIENTE”

Você vai perceber que DADO_DO_CLIENTE está informado no bash como um parâmetro do comando ConsultaClientes.sh, mas perceba também que esse parâmetro é variável.

Na prática, teremos algo aproximadamente assim. Primeiro o usuário chama o programa filtrando um dado do cliente, no nosso exemplo o nome Noah.

myuser@DEVOPS:~/RunbookBR/Scripts$ ./ListaClientesParametro.sh Noah

Em seguida teremos o resultado conforme abaixo:

#########
Clientes Encontrados: 
Noah Jonhy Goodeve      Estrada do Feijão, 10   222.333.111-78

Nesse momento não se preocupe como chegamos nesse resultado, quero que você entenda aqui, apenas a ideia de colocar um parâmetro logo após a execução do programa. Na sequência montaremos nosso script em detalhes.

Outro ponto que preciso que você entenda é que podemos incluir um ou mais parâmetros no nosso programa. Sendo assim, o shell script irá armazenar cada um desses valores variáveis reservadas do Linux.

Variáveis reservadas para parâmetros no Linux

Utilização de parâmetros no Linux Shell Script: ScriptComParametros.sh Parametro1 Parametro2

Variáveis reservadas:

  • $0 : Nome do Programa
  • $# : Quantidade de parâmetros utilizados pelo usuário
  • $* : Todos os parâmetros inseridos
  • $1-9 : Exibe cada parâmetro individualmente
    Por exemplo: echo $1 irá exibir “Parametro1”
    Já o comando echo $2 irá exibir apenas a string “Parametro2”

Definição de variável a partir de Input no Shell

Agora irei apresentar para definição de variáveis pelo usuário no shell uma forma interativa, onde o usuário executa o programa e perguntado sobre os parâmetros que ele deseja utilizar no programa.

Seguindo o mesmo exemplo citado anteriormente, onde montamos nossa lista de clientes e precisamos fazer uma busca específica. Digamos agora que você deseja que seu usuário apenas execute o programa sem nenhum argumento adicional. No entanto, após a execução do programa, seu usuário receberá uma mensagem solicitando que ele entre com algum dado do cliente que deseja buscar. A partir da informação que o usuário entrar a busca ocorrerá da mesma forma que no exemplo anterior, mas agora seu usuário vai chamar o programa apenas, sem parâmetros, por exemplo: ConsultaClientes.sh

Perceba que parâmetro DADO_DO_CLIENTE informado no exemplo anterior não aparece agora, mas precisamos entrar com essa variável no bash.

Na prática, teremos algo aproximadamente assim. Primeiro o usuário chama o programa e depois ele entra com um dado do cliente, no nosso exemplo o nome Maria.

myuser@DEVOPS:~/RunbookBR/Scripts$ ./ListaClientesParametro.sh

Então teremos como resultado a seguinte tela para o usuário, que deverá digitar Maria (no nosso exemplo):

Entre alguma informacao do cliente que deseja buscar: Maria

Em seguida o resultado seguirá conforme abaixo:

#########
Clientes Encontrados: 
Maria Mouse Tick        Rua da Fantasia, 200    666.777.888-21

Mais uma vez não se preocupe como chegamos nesse resultado. Vamos detalhar os scripts conforme já falei anteriormente.

Variáveis definidas com comando read no Linux

Outro ponto que é importante, é que vamos incluir uma ou mais variáveis no nosso programa. Sendo que cada uma delas será armazenada com um valor a ser definido pelo usuário, mas a variável será definida pelo administrador do Shell Script.

  • read VAR : Comando de input para uma variável no Linux
  • read VAR1 VAR2 : Nesse exemplo definimos duas variáveis. Por padrão cada variável é definida pela separação de espaços conforme exemplo que veremos abaixo:
myuser@DEVOPS:~/RunbookBR/Scripts$ read VAR1 VAR2 VAR3
NOME COMPLETO DO MEU USUARIO
myuser@DEVOPS:~/RunbookBR/Scripts$ echo $VAR1
NOME
myuser@DEVOPS:~/RunbookBR/Scripts$ echo $VAR2
COMPLETO
myuser@DEVOPS:~/RunbookBR/Scripts$ echo $VAR3
DO MEU USUARIO
myuser@DEVOPS:~/RunbookBR/Scripts$ 

Perceba acima o que aconteceu:

Considerando cada palavra separada com espaços, a primeira palavra foi armazenado na variável VAR1.

Já a segunda Variável foi armazenada na variável VAR2.

Por fim, como definimos apenas três variáveis como parâmetro no comando, as demais palavras digitadas serão armazenadas no VAR3.

Exibição de instrução para os usuários com comando read no Linux

Usamos o parâmetro -p quando queremos definir uma mensagem para o usuário antes que ele entre com os valores a serem armazenados na variável do comando read.

Por exemplo:

read -p “Informe seu nome: ” VAR

Outra opção para exibição de mensagem de instrução para o usuário é usar o comando echo antes da execução do comandos read.

Por exemplo:

echo -n “Informe seu nome: “

read VAR

Uma terceira forma de uso muito comum com o comando read diz respeito a ocultar a entrada de informações que o usuário vai inserir no programa. Por exemplo, uma senha. Para isso usamos o parametro -s:

Por exemplo:

read -s -p “Informe sua senha: ” USER

Script ListaCLientes

Agora vamos criar nosso script garantindo a entrada de Parâmetros pelo nosso usuário no Linux, seja de maneira interativa ou por parâmetros como vimos anteriormente.

Vamos apresentar abaixo a seguinte situação. Vamos criar uma lista de clientes, com Nome, Endereço e CPF (todas as informações fictícias). Nosso programa precisa pedir o número do CPF, e o programa deve conseguir retornar as demais informações para o usuário que está executando o programa.

Primeiro vamos criar nosso arquivo com a lista dos nossos clientes.

myuser@DEVOPS:~/RunbookBR/Scripts$ cd ~/RunbookBR/Scripts
myuser@DEVOPS:~/RunbookBR/Scripts$ vi ListaClientes.txt

#Arquivo TXT, Listas de Clientes
João da Silva Sauro    Rua da Floresta, 100     111.222.333-89
Maria Mouse Tick        Rua da Fantasia, 200    666.777.888-21
Noah Jonhy Goodeve      Estrada do Feijão, 10  222..333.111-78
~                                                                                                            
~                                                                                                            
~                                                                                                            
:wq

Input no Shell Script com Parâmetros

Conforme vimos ao longo deste artigo, podemos gerar um programa em shell script que ao ser parametrizado pelo usuário na chamada do script, poder ser usado como variável dentro do programa.

Então, vamos montar nosso script e ve-lo em execução mais ma vez:

myuser@DEVOPS:~/RunbookBR/Scripts$ vi ListaClientesParametro.sh 
#!/bin/bash
###############################
# Programa: ListaClientesParametro.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
CLIENTE=$1
DIR=~/RunbookBR/Scripts
LISTACLIENTES=$DIR/ListaClientes.txt

# INICIO DO PROGRAMA
clear #Limpa a tela do bash
echo "
#########
Clientes Encontrados: "
grep "$CLIENTE" "$LISTACLIENTES"

Agora vamos definir as permissões de execução do script para então executá-lo. Lembrando que nesse caso, o usuário precisará incluir algum parâmetro para que o programa possa buscar a informação dentro da lista de Clientes. Vamos buscar pelo CPF do cliente:

myuser@DEVOPS:~/RunbookBR/Scripts$ chmod +x ListaClientesParametro.sh 
myuser@DEVOPS:~/RunbookBR/Scripts$ ./ListaClientesParametro.sh 222.333.111-78

Enfim vamos ver que o resultado deve ser apresentado conforme demonstrado abaixo:

#########
Clientes Encontrados: 
Noah Jonhy Goodeve      Estrada do Feijão, 10   222.333.111-78
myuser@DEVOPS:~/RunbookBR/Scripts$ 

Input no Shell Script com comando read

Basicamente, para que o Linux possa definir uma variável com base nas informações apresentadas pelo usuário que está executando o programa em Shell Script, de maneira interativa, no Linux utilizaremos o comando Linux read.

Agora vamos criar nosso programa em Shell Script conforme definições expostas acima.

myuser@DEVOPS:~/RunbookBR/Scripts$ vi ListaClientesInput.sh 
#!/bin/bash
###############################
# Programa: ListaClientesInput.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
###############################

clear #Limpa a tela do bash
# VARIAVEIS DO PROGRAMA
read -p "Entre alguma informacao do cliente que deseja buscar: " CLIENTE
DIR=~/RunbookBR/Scripts
LISTACLIENTES=$DIR/ListaClientes.txt # INICIO DO PROGRAMA echo " ######### Clientes Encontrados: " grep "$CLIENTE" "$LISTACLIENTES" ~ :wq

Agora vamos garantir as permissões de execução do programa e chamar o programa ListaClientesParametro.sh

myuser@DEVOPS:~/RunbookBR/Scripts$ chmod +x ListaClientesInput.sh 
myuser@DEVOPS:~/RunbookBR/Scripts$ ./ListaClientesInput.sh

Será solicitado ao usuário entrar com alguma informação do cliente. Pode ser um nome, o CPF ou o endereço. Entraremos com CPF da Maria:

Entre alguma informacao do cliente que deseja buscar: 666.777.888-21

Agora vamos ver a saída do comando. Perceba que todas as informações da Maria foram exibidas na tela, sendo assim nosso objetivo cumprido.

#########
Clientes Encontrados: 
Maria Mouse Tick        Rua da Fantasia, 200    666.777.888-21
myuser@DEVOPS:~/RunbookBR/Scripts$ 

Digamos que nosso objetivo seja buscar pelo endereço do cliente. A lógica é a mesma, o usuário irá entrar com o dado do cliente que ele tiver.

Entre alguma informacao do cliente que deseja buscar: Rua da Fantasia

#########
Clientes Encontrados: 
Maria Mouse Tick        Rua da Fantasia, 200    666.777.888-21
myuser@DEVOPS:~/RunbookBR/Scripts$ 

Conclusão

Enfim, aprendemos no artigo de hoje como trabalhar a entrada de informações de usuários em um script shell. Vimos que existem basicamente duas formas de se fazer isso no Linux. A primeira forma a partir de parametrização direta na chamada do programa, enquanto na segunda forma o programa interage com o usuário solicitando por mensagens de texto as informações que o usuário precisa incluir como variável.

Estamos evoluindo gradualmente com a montagem dos nossos scripts. Na sequência da Jornada iremos praticar mais um pouco esses conceitos iniciais para a partir daí então iniciarmos com comandos mais avançados, condicionais, loopings e funções.

Por hoje é isso. Vamos trabalhar juntos nessa Jornada para alcançarmos nosso objetivo de tornar um profissional Linux diferenciado com o Domínio de Shell Script.

Um abraço e 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.