Pular para o conteúdo

Primeira esta contida na segunda [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar
01 02

1. Primeira esta contida na segunda [RESOLVIDO]

Enviado em 19/09/2011 - 16:15h

alguém me da uma luz de como fazer um script desse jeito que não tenho nem ideia!

*receber duas palavras como parâmetro interativamente e verifica se a
primeira está contida dentro da segunda. Em caso de sucesso mostre
mensagem afirmativa e em caso de falha mostre mensagem de falha.
Ao digitar sair o script deverá encerrar

desde de ja agradeço a todos!

abraços

Responder tópico

2. Usando o grep

Melhor resposta

Enviado em 19/09/2011 - 18:27h

Poderia usar um grep também.


#!/bin/bash
# Editado pelo moderador ./.ronin em 2011-09-22

echo $1 | grep $2
if [ $? = 0 ]; then
echo 'contida'
else
echo 'nao contida'
fi

PS: O moderador "./.ronin" marcou esta resposta como a melhor por ser a mais objetiva e rápida, apesar das demais também resolverem o tópico de uma forma mais extensa.

3. Re: Primeira esta contida na segunda [RESOLVIDO]

Enviado em 19/09/2011 - 17:24h

Veja as estruturas deste script. Perceba que embora ele esteja funcional ainda não foram cobridas - propositalmente - algumas falhas como o que aconteceria se o usuário deixasse de digitar algumas das palavras: essa "feature" deixo para o Sr.
Boa sorte!



#!/bin/bash
# package: Helps do Vol
# file: compara_palavras.sh
# Compara duas palavras digitadas interativamente pelo usuário.
#
# since: 2011-09-19 (GMT -03:00)
# version: 1.0
# author: Paulo Riceli Dias Lelis
#
# charset: UTF-8
# end line: Linux
# more: http://sekysu.blogspot.com
# license: GPL v2.0
#

function _getDif()
{
echo $1 | grep $2 && return 0 || return 2
}

echo 'Seja bem vindo ao programa para comparar duas palavras.
Por favor...'
read -p 'Digite a PRIMEIRA palavra: ' PRIMEIRA
read -p 'E agora digite a SEGUNDA palavra: ' SEGUNDA

RST=$( _getDif "${PRIMEIRA}" "${SEGUNDA}" )

if [ $? -eq 0 ]
then
echo "$PRIMEIRA esta continda em $SEGUNDA"
else
echo "$PRIMEIRA NAO esta continda em $SEGUNDA"
fi

exit

4. Re: Primeira esta contida na segunda [RESOLVIDO]

Enviado em 19/09/2011 - 18:39h

As 2 respostas estão corretíssimas, mas segue outra mais simples:


#!/bin/bash
# Editado por ./.ronin 2011-09-22
echo 'palavra_1' | grep 'palavra_2' && echo 'CONTEM' || echo 'NAO CONTEM'
E viva o gde numero de possibilidade do universo shell!!

5. Re: Primeira esta contida na segunda [RESOLVIDO]

Enviado em 19/09/2011 - 19:37h


Adicionadas algumas features para tornar o script mais interativo e livra-lo de falhas não cobridas. - refatoração de código
Note o emprego de recursividade: um procedimento chamou ele próprio.



#!/bin/bash
# package: Help VOL
#
# file: compara_textos.sh
# Compara duas palavras ou frases de forma interativa.
#
# version: 1.1b
#
# since: 2011-00-19 ( GMT -03:00 )
# version: 1.0
#
# charset: UTF-8
# end line: Linux
# more:
# license: GPL v2.0
#
# Tested on system: Linux Slackware 12.2 Kernel 2.6.27.7-smp

MSG[0]='Seja bem vindo ao programa para comparar duas palavras.Por favor...
'
MSG[1]='Digite a PRIMEIRA PALAVRA: '
MSG[2]='E agora digite a SEGUNDA PALAVRA: '
MSG[3]='ESTA CONTIDA EM'
MSG[4]='NAO ESTA CONTIDA EM'
MSG[5]='Deseja continuar a comparar outras duas palavras [s/N]? '

MSG_ERR[0]='Por favor, DIGITE AS DUAS PALAVRAS para as comparar.'


function _getDf()
{
echo "$1" | grep "$2" && return 0 || return 2
}

function _continuar()
{
read -n 1 -p "${MSG[5]}" OP
case $OP in
's') _main;;
'N') echo -e "\nSaindo conforme solicitado\n";
exit;;
*) _continuar;;
esac
}

function _main()
{
echo ${MSG[0]}
read -p "${MSG[1]}" PRIMEIRA
read -p "${MSG[2]}" SEGUNDA

if [ ${#PRIMEIRA} -gt 0 ] && [ ${#SEGUNDA} -gt 0 ]
then
DF=$( _getDf "${SEGUNDA}" "${PRIMEIRA}" )
if [ $? -eq 0 ]
then
echo -e "\n\"$PRIMEIRA\"\n${MSG[3]}\n\"$SEGUNDA\"\n"
else
echo -e "\n\"$PRIMEIRA\"\n${MSG[4]}\n\"$SEGUNDA\"\n"
fi
else
echo -e "\nERROR: ${MSG_ERR[0]}\n"
fi
_continuar
}
_main
exit

6. brigado gente esclareceu minhas duvidas'

Enviado em 19/09/2011 - 22:47h

Muito obrigado gente! Minhas duvidas foram esclarecidas! Muito obrigado mesmo!
Até mais!

7. Re: Primeira esta contida na segunda [RESOLVIDO]

Enviado em 19/09/2011 - 22:55h

nerds leigo escreveu:

Muito obrigado gente minhas duvidas foram esclarecidas muito obrigado mesmo. ate mas!
Não se esqueça de marcar o tópico como resolvido e marcar a melhor resposta ;)

8. Re: Primeira esta contida na segunda [RESOLVIDO]

Enviado em 19/09/2011 - 22:56h

./.ronin escreveu:


Adicionadas algumas features para tornar o script mais interativo e livra-lo de falhas não cobridas. - refatoração de código
Note o emprego de recursividade: um procedimento chamou ele próprio.

Testando códigos.


#!/bin/bash
# package: Help VOL
#
# file: compara_textos.sh
# Compara duas palavras ou frases de forma interativa.
#
# version: 1.1b
#
# since: 2011-00-19 ( GMT -03:00 )
# version: 1.0
#
# charset: UTF-8
# end line: Linux
# more:
# license: GPL v2.0
#
# Tested on system: Linux Slackware 12.2 Kernel 2.6.27.7-smp

MSG[0]='
Seja bem vindo ao programa para comparar duas palavras.
Por favor...
'
MSG[1]='Digite a PRIMEIRA PALAVRA: '
MSG[2]='E agora digite a SEGUNDA PALAVRA: '
MSG[3]='ESTA CONTIDA EM'
MSG[4]='NAO ESTA CONTIDA EM'
MSG[5]='Deseja continuar a comparar outras duas palavras [s/N]? '

MSG_ERR[0]='Por favor, DIGITE AS DUAS PALAVRAS para as comparar'


function _getDf()
{
echo "$1" | grep "$2" && return 0 || return 2
}

function _continuar()
{
read -n 1 -p "${MSG[5]}" OP
case $OP in
's') _main;;
'N') echo -e "\nSaindo conforme solicitado\n";
exit;;
*) _continuar;;
esac
}

echo ${MSG[0]}
read -p "${MSG[1]}" PRIMEIRA
read -p "${MSG[2]}" SEGUNDA

if [ ${#PRIMEIRA} -gt 0 ] && [ ${#SEGUNDA} -gt 0 ]
then
DF=$( _getDf "${SEGUNDA}" "${PRIMEIRA}" )
if [ $? -eq 0 ]
then
echo -e "\n\"$PRIMEIRA\"\n${MSG[3]}\n\"$SEGUNDA\"\n"
else
echo -e "\n\"$PRIMEIRA\"\n${MSG[4]}\n\"$SEGUNDA\"\n"
fi
else
echo -e "\nERROR: ${MSG_ERR[0]}\n"
fi
_continuar

exit

#eof

9. Nao esta Marcando

Enviado em 19/09/2011 - 22:59h

gente nao esta marcando como resolvido esse topico e nao quer marcar a melhor rsposta o que faço pois nao aparece os comando para eu executar coisa que os topicos anteriores aparecera?

10. eu também! errsrs

Enviado em 20/09/2011 - 00:43h

decha eu responder também pô!! rsrs
todo mundo se divertindo e eu de fora rsrsrs segue minha contribuição rsrsr

@AprendiNoLinux ve oq vc acha rsrsrs...


falowww

segue o código:

#!/bin/bash
clear
echo -ne "digite a palavra A # "
read A
clear
echo "palavara \"A\" = $A"
echo -ne "digite a palavra B # "
read B
clear

if [ ${#A} -gt ${#B} ]; then
echo " Impossivel Palavra A estar comtida em B pois A eh maior que B"
else
cont=0
for ((i=0; i<=$((${#B} - ${#A}));i++)); do
echo "palavara \"A\" = $A"
echo "palavara \"B\" = $B"
echo "Rastreando a lavra"
echo -e "${B:0:$i}\e[31m${B:$i:${#A}}\e[0m${B:$((i + ${#A})):${#B}}"
echo ${B:$i:${#A}}
if [ "${B:$i:${#A}}" = "$A" ]; then
cont=$(($cont + 1))
fi
sleep .1
clear
done
fi

echo " A palavra $A esta contida $cont vezes em $B"

#eof

11. Re: Primeira esta contida na segunda [RESOLVIDO]

Enviado em 20/09/2011 - 01:16h

nerds leigo escreveu:

Muito obrigado gente minhas duvidas foram esclarecidas muito obrigado mesmo. ate mas!
Isso ocorre porque quando você criou o tópico, havia se logado como NERDS LEIGO (caixa alta) e quando voltou pra resolver o tópico, havia se logado como nerds leigo (letras minúsculas).

Isso é um antigo bug do fórum, porém como estava entediado acabei resolvendo. Pode tentar novamente, agora vai!

[]'s

12. Re: Primeira esta contida na segunda [RESOLVIDO]

Enviado em 20/09/2011 - 07:41h

hudyfx escreveu:

decha eu responder também pô!! rsrs
todo mundo se divertindo e eu de fora rsrsrs segue minha contribuição rsrsr

@AprendiNoLinux ve oq vc acha rsrsrs...


falowww

segue o código:

#!/bin/bash
clear
echo -ne "digite a palavra A # "
read A
clear
echo "palavara \"A\" = $A"
echo -ne "digite a palavra B # "
read B
clear

if [ ${#A} -gt ${#B} ]; then
echo " Impossivel Palavra A estar comtida em B pois A eh maior que B"
else
cont=0
for ((i=0; i<=$((${#B} - ${#A}));i++)); do
echo "palavara \"A\" = $A"
echo "palavara \"B\" = $B"
echo "Rastreando a palavra"
echo -e "${B:0:$i}\e[31m${B:$i:${#A}}\e[0m${B:$((i + ${#A})):${#B}}"
echo ${B:$i:${#A}}
if [ "${B:$i:${#A}}" = "$A" ]; then
cont=$(($cont + 1))
fi
sleep .1
clear
done
fi

echo " A palavra $A esta contida $cont vezes em $B"

#eof

Eita loop danado kkkk ;)


oops; sempre que você iniciar uma digitação e não deseja que o forum quebre as linhas do entorno da sua imagem do lado esquerdo, use o quote
01 02

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder