Tente usar testes de expressão regular:
read -p "Type a character" c
if [[ "$c" =~ [a-z] ]]; then
echo "lowercase"
elif [[ "$c" =~ [A-Z] ]]; then
echo "uppercase"
else
echo "Non-alphabetic"
fi
Este é o meu código que escrevi. Eu preciso de um código simples usando se elif para verificar se o personagem lido é um maiúsculo, minúsculas ou um símbolo especial.
echo "enter a char"
read c
if [[ $c == [A-Z] ]];
then
echo "upper"
elif [[ $c == [a-z] ]];
then
echo "lower"
else
echo "Digit or special symbols!"
fi
O seguinte é a saída que recebi após inserir caracteres
enter a char
A
upper
enter a char
a
Digit or special symbols!
aravind@bionic-beaver:~/Desktop$ ./1.sh
enter a char
1
Digit or special symbols!
A menos que você esvazie $IFS
e adicione a opção -r
, read
lê uma linha de entrada de uma maneira muito especial .
Por exemplo, se o usuário inserir " \x "
, com o valor padrão de $IFS
, $c
conterá x
, não o que o usuário inseriu.
Também [a-z]
não corresponde a letras minúsculas, corresponde a qualquer classificação entre a
e z
na localidade (com alguma variação no comportamento entre shell. Por exemplo, com bash
, em muitas localidades , que inclui as letras inglesas entre A e Y). Pode até combinar sequências de caracteres em algumas localidades e algumas ferramentas.
Aqui, você provavelmente desejaria:
printf 'Please enter a character: '
IFS= read -r c
case $c in
([[:lower:]]) echo lowercase letter;;
([[:upper:]]) echo uppercase letter;;
([[:alpha:]]) echo neither lower nor uppercase letter;;
([[:digit:]]) echo decimal digit;;
(?) echo any other single character;;
("") echo nothing;;
(*) echo anything else;;
esac
(essa sintaxe sendo POSIX sh
syntax, você nem precisa instalar bash
).
Se você quisesse limitá-lo às letras em inglês (letras do alfabeto latino sem diacríticos), seria necessário nomeá-las individualmente:
([abcdefghijklmnopqrstuvwxyz]) echo English lowercase letter;;
Ou corrija o código de idioma para C com export LC_ALL=C
após a instrução read
e antes do case
, mas o teste (?)
seria inválido, pois poderia interpretar incorretamente algum caractere como sequência de caracteres. Por exemplo, um UTF-8 é
seria visto como dois caracteres na localidade C.
Tags bash shell scripting shell-script