Você pode fazer isso com a correspondência de padrão padrão procurando por qualquer um dos caracteres não permitidos e rejeitando a entrada se encontrar algum. Ou você pode usar globs estendidos ( extglob
) ou regexes e explicitamente certificar-se de que a string inteira é composta por caracteres que são permitidos.
#/bin/bash
shopt -s extglob globasciiranges
case "$1" in *([a-zA-Z])) echo "case ok" ;; esac
[[ "$1" = *([a-zA-Z]) ]] && echo " [[ ok"
[[ "$1" =~ ^[a-zA-Z]*$ ]] && echo "rege ok"
globasciiranges
impede que [a-z]
corresponda às letras acentuadas, mas a correspondência regex não obedece a ela. Com a regex, você precisaria definir LC_COLLATE=C
para impedir a correspondência.
Todos esses permitem a string vazia. Para evitar isso, altere os asteriscos para recompensas ( *
to +
).