Não funciona porque os elementos da sua matriz são cão \ n cat \ n, sapo \ n, monstro \ n . Então, sua declaração case deve ser:
case ${operations[$i]} in
dog\n)
echo "Step dog" & wait ;;
cat\n)
echo "Step cat" & wait ;;
*)
echo "Step all else" & wait ;;
esac
Estritamente falando, acho que é uma má idéia desconsiderar a possibilidade de que uma alma inocente tenha deixado um ou dois espaços após cada entrada, de modo que eu prefira usar:
case ${operations[$i]} in
dog*)
echo "Step dog" & wait ;;
cat*)
echo "Step cat" & wait ;;
*)
echo "Step all else" & wait ;;
esac
mas depois, YMMV.