if para vogal/consoante [RESOLVIDO]

1. if para vogal/consoante [RESOLVIDO]

luiz
luizsouza99

(usa Linux Mint)

Enviado em 11/10/2016 - 12:01h

Galera eu fiz o if abaixo para entrar apenas se o caracter na variavel for consoante, entao pergunto se tem como eu fazer algo mais prático/rapido (menos codigos)?

if [ "$ANT_3" != "a" -a "$ANT_3" != "e" -a "$ANT_3" != "i" -a "$ANT_3" != "o" -a "$ANT_3" != "u" ];then
ANT_3_VOGAL=$"nao";fi


Obrigado.




  


2. MELHOR RESPOSTA

Iago Lira
iagolira

(usa Debian)

Enviado em 11/10/2016 - 15:03h

Pra saber se é uma consoante, implemente o código abaixo:

read x; if [[ "$x" = [a-zA-Z] ]]; then echo "consoante!"; fi


Ou


read x; [[ "$x" = [a-zA-Z] ]] && echo "consoante!"


Mas se você quer saber se é uma vogal, implemente o código abaixo:

read x; if [[ "$x" = [aeiou] ]]; then echo "vogal!"; fi


Ou


read x; [[ "$x" = [aeiou] ]] && echo "vogal!"

Nome: Francisco Iago Lira Passos
Curso: Mestrando em Física

3. Re: if para vogal/consoante [RESOLVIDO]

luiz
luizsouza99

(usa Linux Mint)

Enviado em 11/10/2016 - 22:36h

Cara muito obrigado, deu certo.

só os dois comandos da consoante que não funcionaram, mas foi só colocar o simbolo de diferença "!=" nos comandos da vogal que funcionou como consoante, muito obrigado.


4. Re: if para vogal/consoante [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 11/10/2016 - 22:51h

O comando da consoante não deveria ser [A-Za-z] porque pega as faixas de letras entre 'A' e 'Z' e 'a' e 'z' que possuem vogais no intervalo.

O que sugiro fazer é combinar ambos os recursos.

Por exemplo, naquele exemplo de $letra = [aeiou] poderia ser $letra = [AEIOUaeiou] que avalia vogais maiusculas e minúsculas.

Daí seria o casamento de avaliar $letra = [A-Za-z] que diz se é uma letra com $letra != [AEIOUaeiou] que diz não ser consoante.

Porque se avaliar apenas $letra != [AEIOUaeiou] daí pode surgir o erro de que $letra pode ser um carácter alienígena como @#$%"etc.

Combinando ambos primeiro avalia se é letra e se não é vogal.

Outro modo seria escrever intervalos de consoantes como [b-df-hj-np-tv-z] ou por extenso [bcdfghjklmnpqrstvwxyz].

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



5. Re: if para vogal/consoante [RESOLVIDO]

luiz
luizsouza99

(usa Linux Mint)

Enviado em 11/10/2016 - 23:18h

Tem razão.

Tentei colocar as duas condições nesse modelo de if mas não consegui.

o que fiz foi usar a sua sugestão sobre as consoantes assim:
if [[ "$UM_3" = [bcdfghjklmnpqrstvwxyz] ]]; then echo consoante; fi 


identificando se é consoante já é o suficiente e não entra caracteres especiais, como o script converte tudo para minuscula não precisei adicionar algo que identificasse as maiusculas.

muito obrigado.


6. Re: if para vogal/consoante [RESOLVIDO]

Iago Lira
iagolira

(usa Debian)

Enviado em 12/10/2016 - 09:04h

listeiro_037 escreveu:

O comando da consoante não deveria ser [A-Za-z] porque pega as faixas de letras entre 'A' e 'Z' e 'a' e 'z' que possuem vogais no intervalo.

O que sugiro fazer é combinar ambos os recursos.

Por exemplo, naquele exemplo de $letra = [aeiou] poderia ser $letra = [AEIOUaeiou] que avalia vogais maiusculas e minúsculas.

Daí seria o casamento de avaliar $letra = [A-Za-z] que diz se é uma letra com $letra != [AEIOUaeiou] que diz não ser consoante.

Porque se avaliar apenas $letra != [AEIOUaeiou] daí pode surgir o erro de que $letra pode ser um carácter alienígena como @#$%"etc.

Combinando ambos primeiro avalia se é letra e se não é vogal.

Outro modo seria escrever intervalos de consoantes como [b-df-hj-np-tv-z] ou por extenso [bcdfghjklmnpqrstvwxyz].

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Muito boa sua sugestão, mas [AEIOUaeiou] não pega caracteres "alienígenas", ou seja, pelo meus testes isto não aconteceu. E não se deve usar "[ '$x" = [AEIOUaeiou] ] && echo 'vogal!'" e sim "[ '$x" = [AEIOUaeiou] ] && echo 'vogal!". E só dei uma dica, por outro lado, obrigado pela sugestão.

Nome: Francisco Iago Lira Passos
Curso: Mestrando em Física


7. Re: if para vogal/consoante [RESOLVIDO]

luiz
luizsouza99

(usa Linux Mint)

Enviado em 12/10/2016 - 10:59h

ele falou sobre os caracteres alienigenas porque eu modifiquei o seu comando, coloquei o sinal de diferença assim:

read x; if [[ "$x" != [aeiou] ]]; then echo "vogal!"; fi 


dando margem para entrar consoantes e qualquer caracter diferente de "aeiou"

fiz isso porque os dois primeiros comandos não deram certo, mas acabei resolvendo modificando um pouco o comando:

if [[ "$UM_3" = [bcdfghjklmnpqrstvwxyz] ]]; then echo consoante; fi 



8. Re: if para vogal/consoante [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 12/10/2016 - 13:02h

luizsouza99 escreveu:

Galera eu fiz o if abaixo para entrar apenas se o caracter na variavel for consoante, entao pergunto se tem como eu fazer algo mais prático/rapido (menos codigos)?

if [ "$ANT_3" != "a" -a "$ANT_3" != "e" -a "$ANT_3" != "i" -a "$ANT_3" != "o" -a "$ANT_3" != "u" ];then
ANT_3_VOGAL=$"nao";fi


Obrigado.

Apesar de RESOLVIDO, segue sugestão:
#!/bin/bash
#IDENTIFICA SE É VOGAL, CONSOANTE ou Nº.
VGL="AEIOUaeiou"
CST="$(echo {A..Z} {a..z}|sed -r 's/['$VGL' ]//g')"
read -p "DIGITE: " -n1 X
case $X in
[$CST]) echo -e "\nCONSOANTE" ;;
[$VGL]) echo -e "\nVOGAL" ;;
[0-9]) echo -e "\nNúMERO" ;;
*) echo -e "\nOutro" ;;
esac



Marcelo Oliver


9. Re: if para vogal/consoante [RESOLVIDO]

luiz
luizsouza99

(usa Linux Mint)

Enviado em 12/10/2016 - 19:54h

apesar de muito bom, o seu codigo nao se encaixa no meu script, porque eu uso 4 variaveis para identificar determinada regiao de uma palavra e eu consegui isso fazendo aquele esquema de if e usando apenas 4 linhas.

mas se eu precisar de identificar todas as letras da palavra no começo do script o seu codigo já é mais viavel que o if já que eu poderia coloca-lo num loop e o nome de todas as variaveis seriam de acordo com este loop.

obrigado.


10. Re: if para vogal/consoante [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/10/2016 - 14:04h

luizsouza99 escreveu:

apesar de muito bom, o seu codigo nao se encaixa no meu script, porque eu uso 4 variaveis para identificar determinada regiao de uma palavra e eu consegui isso fazendo aquele esquema de if e usando apenas 4 linhas.

mas se eu precisar de identificar todas as letras da palavra no começo do script o seu codigo já é mais viavel que o if já que eu poderia coloca-lo num loop e o nome de todas as variaveis seriam de acordo com este loop.

obrigado.


Quanto ao Nº de Linhas . . . .
VGL="AEIOUaeiou" && CST="$(echo {A..Z} {a..z}|sed -r 's/['$VGL' ]//g')"
case $ANT_3 in [$CST]) echo -e "\nCONSOANTE" ;; [$VGL]) echo -e "\nVOGAL" ;; esac

marcelo oliver



11. Re: if para vogal/consoante [RESOLVIDO]

luiz
luizsouza99

(usa Linux Mint)

Enviado em 13/10/2016 - 17:31h

e eu achando que nao tinha jeito de escrever um codigo menor ainda, rsrs, esse ficou a metade do que esta no script, só não vou mexer com case por enquanto, mas está anotado, muito obrigado.


12. Re: if para vogal/consoante [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/10/2016 - 18:50h

luizsouza99 escreveu:

e eu achando que nao tinha jeito de escrever um codigo menor ainda, rsrs, esse ficou a metade do que esta no script, só não vou mexer com case por enquanto, mas está anotado, muito obrigado.

-------------------------------------------------------------------------------------
Outra Opção, um pouco menor . . . Rsrsrsr
Essa é com "if"

if egrep -iq '[AEIOU]' <<< "$ANT_3";then echo "VOGAL";else echo "CONSOANTE";fi 



Marcelo Oliver




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts