Limite de caracteres com read.

1. Limite de caracteres com read.

Edegard Menezes dos Santos
edestaark

(usa CentOS)

Enviado em 29/04/2016 - 00:23h

Olá, boa noite!

Trabalho com o OpenVZ e estou trabalhando em um script para gerenciamento de containers, porém tenho me deparado com uma dificuldade relacionada ao grep que tenho tentado utilizar.

Abaixo um trecho para capturar a variavel:

tput cup 8 0; echo "-----------------------------------------------------"
tput cup 9 0; echo "Digite o Domínio..: "
tput cup 10 0; echo "Hostname..........: "
tput cup 11 0; echo "IP Address........: "
tput cup 12 0; echo "Container ID......: "
tput cup 13 0; echo "Status............: "
tput cup 14 0; echo "***Enter=Retorna / xx=Lista todos Containers!*** "
tput cup 15 0; echo "-----------------------------------------------------"
tput cup 9 21; read DOM #Exatamente aqui, ele irá ler o conteúdo digitado.

Em seguida, todas as informações são adicionadas em variaveis com base em um grep:

HNAME=$(grep $DOM ARQTT | awk '{print $5}')
IPADD=$(grep $DOM ARQTT | awk '{print $4}')
CTID=$(grep $DOM ARQTT | awk '{print $1}')
STATS=$(grep $DOM ARQTT | awk '{print $3}')

Porém, caso o usuário digite qualquer caractere ele já realiza este grep, por exemplo se eu digito apenas a letra "a" e pressino Enter, ele busca todos os domínios que possuem a letra A e as informações acabam ficando todas bagunçadas.

Com isso, gostaria de saber se alguém pode ajudar em relação a uma quantidade minima de caracteres que o read possa ler, dei uma olhada no man no "-n" e "-N", porém não funcionou. Não sei se utilizei da maneira errada ou não é a forma correta também.

Seguem os links com o Script e também um arquivo modelo para realização de testes:

Script: http://tinyurl.com/h6e79eq
Arquivo Teste: http://tinyurl.com/gtqvq5o

Como devem ter notado, sou bastante novo em questão de Shell Scripting, por isso caso tenham algumas dicas para eu fortalecer qualquer questões do script, principalmente relacionadas a validações, etc. Por favor fiquem a vontade, qualquer crítica será muito bem vinda :).

Desde de já agradeço a atenção.



  


2. Re: Limite de caracteres com read.

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 29/04/2016 - 01:08h

Boa noite, crie uma pequena função que checa se a pessoa digitou uma quantidade mínima de caracteres por exemplo:
function CheckNum(){
read -p "digite 5 caracteres: " var
if [ ${#var} -lt 5 ]; then
echo -e "\nDigite 5 caracteres ou mais!.\n"
CheckNum
fi
}


cole isto no seu script e chame a função na parte onde está escrito read DOM do seu script, troque a quantidade de caracteres pela quantidade que você deseja. Sou newbie também, estamos no mesmo barco kkkkkk.

Pergunta: Você quer que a pessoa digite os ip's ou o ServiçeCT ?





=====================================================================
Não existe saber mais ou saber menos, existem saberes diferentes.
ID = LPI000359879
=====================================================================






3. Obrigado!

Edegard Menezes dos Santos
edestaark

(usa CentOS)

Enviado em 29/04/2016 - 09:09h

Obrigado!

Irei adicionar essa função agora de tarde, quando estiver no meu intervalo de trabalho. Assim já faço os testes direitinho.

Quanto a sua pergunta, o usuário vai poder digitar tanto o hostname quanto o IP, em seguida ele vai confirmar se os demais dados batem
com o container que deseja suspender, reativar, cancelar ou remover.

Terei que aumentar o número minínmo de caracteres pois 4 deles são sempre identicos devido ao padrão hostname "vps.", assim já evito erros relacionado a isso também.

Novamente, muito obrigado!



4. Re: Limite de caracteres com read.

Ronaldo Ferreira de Lima
textmode

(usa Slackware)

Enviado em 29/04/2016 - 10:37h

edestaark escreveu:
[...]
Quanto a sua pergunta, o usuário vai poder digitar tanto o hostname quanto o IP, em seguida ele vai confirmar se os demais dados batem
com o container que deseja suspender, reativar, cancelar ou remover.

Terei que aumentar o número minínmo de caracteres pois 4 deles são sempre identicos devido ao padrão hostname "vps.", assim já evito erros relacionado a isso também.


Se entendi, você está co problemas na validação dos dados fornecidos pelo usuário. Em contrapartida, você já possui todos os hostnames/IPs válidos num arquivo e está exigindo ao usuário redigitá-los, você poderia utilizar o select do shell e exibir o menu de opções válidas para o usuário apenas escolher qual é ao invés de ser obrigado a lembrar, já evita erros de digitação e é mais produtivo, no VOL tem várias dicas e artigos ensinando a usar o select. Se optar por continuar usando apenas o read, vai precisar colocá-lo dentro de um looping while até que uma opção válida seja digitada. Poderia ainda utilizar o getopts e passar o hostname/IPs como parâmetro para o script diretamente na linha de comando e deixar o read de lado.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts