(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.