(suponho que você tenha alterado if [[ "${site}" == "${all[@]}" ]]
para if [[ "$site" == "$item" ]]
.)
Imagine como o seu loop é executado.
Suponha que você digite b
.
A primeira iteração do loop define item
igual a a
.
Você compara b
a a
.
Se eles fossem iguais, você reportaria a validação.
Mas eles não são iguais, então você relata falhas e sai.
Não é melhor digitar a
.
Na primeira iteração do loop,
item
é a
e você reporta sucesso e continua em loop .
Então item
se torna b
, e você entra na cláusula else
,
onde você reporta falha e sai.
O problema é que você reporta falha se a entrada
é diferente de qualquer um dos valores válidos.
Mas a entrada any será diferente de pelo menos dois dos valores válidos
(entradas inválidas serão diferentes das três).
Você precisa reportar sucesso se a entrada for igual a qualquer um dos valores válidos,
e falha de outra forma.
Exatamente como você faz isso depende do quadro geral.
Se ler a entrada e validar é tudo que você quer fazer,
você precisa apenas de um pequeno rearranjo do seu código atual:
for item in "${all[@]}"; do
echo "$item"
if [[ "$site" == "$item" ]]; then
echo "Site Name validated" && exit 0
fi
done
echo "No Match For Site Name" && exit 1
Mas se (como é provável)
você quer que o script continue e faça algo com uma entrada válida,
uma boa maneira é usar um sinalizador:
valid=
for item in "${all[@]}"; do
echo "$item"
if [[ "$site" == "$item" ]]; then
echo "Site Name validated" && valid=1
fi
done
if ! [ "$valid" ]
then
echo "No Match For Site Name" && exit 1
fi
# (script continues with valid input)
︙
P.S. Você não precisa dizer "${site}"
neste contexto; "$site"
está bem.