break
não tem efeito nas instruções if
. No seu caso de uso, return
terá o efeito que você está buscando, pois não há instruções depois que o exterior if
e return
saem da função.
Shell: quebra ambos se e for loop de uma só vez.
Meu script: ip para nomear o código de resolução
IP=192.168.27.191
hostNameChecker()
{
if [ 'getent hosts $1 | wc -l' -ne 0 ];then
HOST_NAME='hostname'
DNS_IP='getent hosts $1 | cut -d " " -f 1 | sed 's/^[ \t]*//;s/[ \t]*$//''
DNS_NAMES='getent hosts $1 | cut -d " " -f 2- | sed 's/^[ \t]*//;s/[ \t]*$//''
for DNS_NAME in ${DNS_NAMES[@]}
do
if [[ "$DNS_NAME" == "$HOST_NAME" ]];then
echo "Host name:$HOST_NAME and DNS_NAME:$DNS_NAME matched"
break 2;########Not working. only brakes inner for not outer if
else
continue;
fi
done
echo "ERROR: Mismatch between DNS:$DNS_NAMES and Hostname:$HOST_NAME"
exit 0
fi
}
hostNameChecker $IP
No script acima, quebra 2 só quebra interno para não externo if. Eu posso adicionar outro para resolvê-lo, mas existe alguma outra maneira possível ???
Em C, você usaria goto
, no Bash não temos goto
no entanto, mesmo que houvesse uma construção de linguagem semelhante, isso é considerado prejudicial .
Então faça isso usando outro if
.