Validar String com Espaço [RESOLVIDO]

1. Validar String com Espaço [RESOLVIDO]

Denilson Martins
denilsoneskas

(usa Ubuntu)

Enviado em 11/05/2010 - 17:22h

Criei um shell script para municiar um arquivo de texto com os sites liberados pelo meu squid (sitelib).
Para validar o motivo de liberacao do site usei como parte do script, a resposta dada ao usuário mmedinabr no seguinte link:
http://www.vivaolinux.com.br/topico/Shell-Script/Validar-STRING
Porém quando digito o motivo e uso espaço para separar as palavras, ele não valida o espaço e volta para digitar, quando digito sem espaçar as palavras do motivo funciona(só assim)
Preciso validar o espaço. Gostaria de saber se está certo a ideia do script.
O script tem objetivo de fazer com que seja cadastrado os sites liberados sem que entre na pasta de configuração do squid, bastante apenas chamar o script.

#!/bin/bash
echo "______________________________________________________________"
echo " Por meio desse script pode ser definidas os sites a liberar: "
echo " Coloque o site sem o wwww. (ex: globo.com) "
echo " Digite o site a ser liberado "
read site
while true
do
echo " Digite o motivo da liberacao do site (maximo 50 caracteres): "
read motivo
echo $motivo |grep -qs '^[a-z]\{1,50\}$' && break
done
echo "$site # $motivo" >> /etc/squid/sitelib
squid -k reconfigure
echo " Site Liberado "
echo "______________________________________________________________"


Agradeço a todos desde já!


  


2. MELHOR RESPOSTA

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 11/05/2010 - 20:41h

O que o SMarcell falou é verdade, mas no seu script o erro está na expressão regular do grep.

Veja que com ela você diz para o grep "procurar somente caracteres no intervalo a-z que podem aparecer em qualquer quantidade de 1 a 50".

O "erro" ocorre porque o espaço não está em sua regexp e quando ele aparece na string lida, o grep retorna falso e assim o break não é executado.

Mude:
echo $motivo |grep -qs '^[a-z]\{1,50\}$' && break

para

echo $motivo |grep -qs '^[a-z ]\{1,50\}$' && break

Baahhh.. classes POSIX são um saco, mas tornam a regexp mais geral (aceita tabs e outros caracteres considerados espaços):

echo $motivo |grep -qs '^[a-z[:space:]]\{1,50\}$' && break

Espero ter ajudado.
t+

3. Re: Validar String com Espaço [RESOLVIDO]

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 11/05/2010 - 17:39h

Variáveis cujo conteúdo contenha espaços em branco, devem sempre ser protegidas com aspas.


4. Valeu, resolvido.

Denilson Martins
denilsoneskas

(usa Ubuntu)

Enviado em 12/05/2010 - 08:22h

SMarcell agradeço, caso o amigo Daemonio não postasse o que fazer iria pesquisar sobre sua dica, como ele postou e deu certo, agradeço então aos 2. Daemonio valeu.