como verificar se o nome de host FQDN é apenas com letras minúsculas

0

queremos verificar o nome do host nas máquinas a regra deveria ser assim:

cada nome de host deve ser apenas com letras minúsculas cada nome de host é FQDN

nós tentamos isso

hostname=master01.nassa.com
[[ $hostname  =~ ^[a-z.a-z.a-z]+$ ]] && hostname is ok

mas apesar do nome do host ser válido, não é print "hostname is ok"

qual é a sintaxe correta, onde estamos errados?

    
por yael 25.11.2018 / 12:18

3 respostas

4

Seu regex está de alguma forma errado e a parte após && erra echo . Em vez de escrever regexs complexos para validar o hostname, considere fazer o oposto:

hostname=master01.naSsa.com
[[ $hostname  =~ [A-Z] ]] && echo "hostname is not ok"
hostname is not ok

Ou

hostname=master01.nassa.com
[[ $hostname  =~ [A-Z] ]] || echo "hostname is ok"
hostname is ok

Além disso, para evitar situações complexas, é melhor definir localidade como C ou posix usando LC_ALL=C
Consulte: Por que [AZ] corresponde a letras minúsculas no bash?

    
por 25.11.2018 / 12:50
2

Para uma solução /bin/sh :

hostname=master01.nassa.com

case $hostname in
    *[A-Z]*)
        echo 'Not ok' ;;
    *)
        echo 'Ok'
esac

A ramificação "Not ok" é obtida se o valor de $hostname contiver caracteres maiúsculos (isso pode depender das configurações locais), enquanto a ramificação "Ok" é obtida se a ramificação "Not ok" não for tomadas.

Isso é semelhante ao bash -specific (e também ksh e zsh )

if [[ "$hostname" == *[A-Z]* ]]; then
    echo 'Not ok'
else
    echo 'Ok'
fi

Seu teste com a expressão regular ^[a-z.a-z.a-z]+$ é idêntico a um teste com ^[a-z.]+$ (já que uma classe de caractere [...] corresponde a um único caractere e a-z repetido dentro dele não fará diferença). Isso realmente fará o que você diz , o que significa permitir apenas nomes de host com letras minúsculas (e pontos). A questão é que seu nome de host também contém dígitos. Para permitir isso também, você teria que usar ^[a-z0-9.]+$ . Nesse caso, porém, pode ser mais fácil testar o conjunto menor de caracteres que não são permitidos, que é o que eu faço acima.

    
por 25.11.2018 / 13:39
1
hostname=master01.nassa.com
[[ "$hostname"  =~ ^[a-z]+\.[a-z]+\.[a-z]+$ ]] && echo hostname is ok

é o seu exemplo com alguns bugs corrigidos, mas para uma validação mais precisa, consulte link

    
por 25.11.2018 / 13:12