<Anterior | Conteúdo | Próxima>
Executando Ações Múltiplas
Em versões de bater antes de 4.0, casas permitia que apenas uma ação fosse realizada em uma partida bem-sucedida. Depois de uma correspondência bem-sucedida, o comando seria encerrado. Aqui, vemos um script que testa um personagem:
#! / Bin / bash
# case4-1: teste um personagem
ler -n 1 -p "Digite um caractere>" eco
caso $ REPLY em
[[: em maiúsculas:]]) echo "'$ REPLY' está em maiúsculas." ;;
[[: inferior:]]) echo "'$ REPLY' é minúsculo." ;;
[[: alpha:]]) echo "'$ REPLY' é alfabético." ;;
[[: dígito:]]) echo "'$ REPLY' é um dígito." ;; [[: gráfico:]]) echo "'$ REPLY' é um caractere visível." ;;
[[: punct:]]) echo "'$ REPLY' é um símbolo de pontuação." ;; [[: espaço:]]) echo "'$ REPLY' é um caractere de espaço em branco." ;; [[: xdigit:]]) echo "'$ REPLY' é um dígito hexadecimal." ;;
esac
#! / Bin / bash
# case4-1: teste um personagem
ler -n 1 -p "Digite um caractere>" eco
caso $ REPLY em
[[: em maiúsculas:]]) echo "'$ REPLY' está em maiúsculas." ;;
[[: inferior:]]) echo "'$ REPLY' é minúsculo." ;;
[[: alpha:]]) echo "'$ REPLY' é alfabético." ;;
[[: dígito:]]) echo "'$ REPLY' é um dígito." ;; [[: gráfico:]]) echo "'$ REPLY' é um caractere visível." ;;
[[: punct:]]) echo "'$ REPLY' é um símbolo de pontuação." ;; [[: espaço:]]) echo "'$ REPLY' é um caractere de espaço em branco." ;; [[: xdigit:]]) echo "'$ REPLY' é um dígito hexadecimal." ;;
esac
A execução deste script produz o seguinte:
[me @ linuxbox ~] $ case 4-1
Digite um caractere> a
'a' é minúsculo.
[me @ linuxbox ~] $ case 4-1
Digite um caractere> a
'a' é minúsculo.
O script funciona na maior parte, mas falha se um caractere corresponder a mais de uma das classes de caracteres POSIX. Por exemplo, o caractere "a" é minúsculo e alfabético, bem como um dígito hexadecimal. No bater antes da versão 4.0 não havia como casas para corresponder a mais de um teste. Versões modernas de bater, adicione a notação “;; &” para
encerrar cada ação, então agora podemos fazer isso:
#! / Bin / bash
# case4-2: teste um personagem
ler -n 1 -p "Digite um caractere>" eco
caso $ REPLY em
[[: em maiúsculas:]]) echo "'$ REPLY' está em maiúsculas." ;; &
[[: inferior:]]) echo "'$ REPLY' é minúsculo." ;; &
[[: alpha:]]) echo "'$ REPLY' é alfabético." ;; &
[[: dígito:]]) echo "'$ REPLY' é um dígito." ;; & [[: gráfico:]]) echo "'$ REPLY' é um caractere visível." ;; &
[[: punct:]]) echo "'$ REPLY' é um símbolo de pontuação." ;; & [[: espaço:]]) echo "'$ REPLY' é um caractere de espaço em branco." ;; & [[: xdigit:]]) echo "'$ REPLY' é um dígito hexadecimal." ;; &
esac
#! / Bin / bash
# case4-2: teste um personagem
ler -n 1 -p "Digite um caractere>" eco
caso $ REPLY em
[[: em maiúsculas:]]) echo "'$ REPLY' está em maiúsculas." ;; &
[[: inferior:]]) echo "'$ REPLY' é minúsculo." ;; &
[[: alpha:]]) echo "'$ REPLY' é alfabético." ;; &
[[: dígito:]]) echo "'$ REPLY' é um dígito." ;; & [[: gráfico:]]) echo "'$ REPLY' é um caractere visível." ;; &
[[: punct:]]) echo "'$ REPLY' é um símbolo de pontuação." ;; & [[: espaço:]]) echo "'$ REPLY' é um caractere de espaço em branco." ;; & [[: xdigit:]]) echo "'$ REPLY' é um dígito hexadecimal." ;; &
esac
Quando executamos este script, obtemos o seguinte:
[me @ linuxbox ~] $ case 4-2
Digite um caractere> a 'a' é minúsculo. 'a' é alfabético.
'a' é um caractere visível. 'a' é um dígito hexadecimal.
[me @ linuxbox ~] $ case 4-2
Digite um caractere> a 'a' é minúsculo. 'a' é alfabético.
'a' é um caractere visível. 'a' é um dígito hexadecimal.
A adição da sintaxe ";; &" permite que o caso continue para o próximo teste em vez de simplesmente encerrar.