Na instrução de caso do script de shell incapaz de reconhecer letras maiúsculas

0

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?

    
por Sonevol 17.07.2017 / 01:36

2 respostas

0

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

    
por 17.07.2017 / 01:42
1

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

    
por 17.07.2017 / 02:30