Aqui, você precisa definir LANG
como C
No tipo de terminal
LANG=C
A variável de ambiente LANG
indica o idioma / localidade e a codificação, em que C
é a configuração de idioma
Eu tenho o seguinte script de shell
#! /bin/bash
echo -e "Enter any character: \c"
read value
case $value in
[a-z] )
echo You have entered a lower case alphabet;;
[A-Z] )
echo You have entered an upper case alphabet;;
[0-9] )
echo You have entered a number;;
[?] )
echo You have entered a special character;;
[*] )
echo Unknown value;;
esac
Aqui, quando eu insiro uma letra maiúscula como
K
Eu recebo a saída
You have entered a lower case alphabet
Como corrigir isso?
Em conjunto com o link de agrupamento steeldriver , a solução é usar conjuntos conforme definido em man tr
.
Além disso, uma boa referência para [[
vs [
Wooledge, GLOBS e por que o código a seguir ainda pode falhar apenas [
1 #! /bin/bash
2
3 echo -e "Enter any character: \c"
4 read -rN 1 value
5 echo
6
7 case $value in
8 [[:lower:]] )
9 echo You have entered a lower case alphabet;;
10 [[:upper:]] )
11 echo You have entered an upper case alphabet;;
12 [[:digit:]] )
13 echo You have entered a number;;
14 [?] )
15 echo You have entered a special character;;
16 [*] )
17 echo Unknown value;;
18 esac
A partir do link wooledge acima:
Ranges
Globs can specify a range or class of characters, using square brackets. This gives you the ability to match against a set of characters. For example:
[abcd] Matches a or b or c or d
[a-d] The same as above, if globasciiranges is set or your locale is C or POSIX. Otherwise, implementation-defined.
[!aeiouAEIOU] Matches any character except a, e, i, o, u and their uppercase counterparts
[[:alnum:]] Matches any alphanumeric character in the current locale (letter or number)
[[:space:]] Matches any whitespace character
[![:space:]] Matches any character that is not whitespace
[[:digit:]_.] Matches any digit, or _ or .
Para informações sobre globasciiranges: Manual de referência do Bash
Tags shell-script