Problema em Shell Script.

T_Reis05

Power Member
Boas tenho que fazer um trabalho para a faculdade, em sh, onde o ficheiro tem que traduzir texto de ingles para portugues e vive versa usando o google dictionary.
O meu codigo da-me um erro quando o tento lançar pelo terminal alguem me pode ajudar?

Aqui fica o codigo:

Código:
#!/bin/bash

funcao_pt_ing()
{
echo "Introduza o que deseja traduzir e pressione Enter:\n"
      read texto
      wget -q -O file "http://www.google.com/dictionary?langpair=pt|en&q=$texto"; 
      sed  -n  '/<span class="mn">/,/<span class="prn-btn">/p' file
}



funcao_ing_pt()

{
echo "Introduza o que deseja traduzir e pressione Enter:\n"
      read texto
      wget -q -O file "http://www.google.com/dictionary?aq=f&langpair=en|pt&q=$texto&hl=en"; 
      sed  -n  '/<span class="mn">/,/span>/p' file

}




menu()
{
echo "**************************************"
echo "**         TRADUTOR                **"

echo "*****************MENU*****************"
echo "1-Portugues / Ingles"
echo "2-Ingles / Portugues"
echo "*-Exit"
echo -n "Qual a opcao desejada? "
       read opcao
           case $opcao in
         1)  funcao_pt_ing ;;
            2)  funcao_ing_pt ;;
            
        *) "Opcao desconhecida." ; echo ; exit ;;
           esac

}


menu
Aqui esta o erro que me da.
./traduzir.sh: line 25: syntax error near unexpected token `2'
raduzir.sh: l 2) funcao_ing_pt ;;' 1) funcao_pt_ing ;;


Se me pudesse ajudar, e que tenho que entregar isto segunda de manha.

Espero que tenha postado no sitio correcto.

Abraços
 
Última edição pelo moderador:
Não tenho aqui nenhuma compilador à mão.
Podes fazer isto
"Opcao desconhecida." ; echo ; ?
nao será antes assim:
echo "Opcao desconhecida." ; ?
 
O erro que o "nasic" reportou e de facto um erro.
Independentemente de poder ou nao ser o unico, deves corrigi-lo.

Se quiseres que o "echo" interprete caracters especiais, como por exemplo "\n" tens que adicionar a opcao "-e". Caso contrario, faz o output de tudo o que estiver entre as aspas.

Apos ter feito ambas as correccoes (nasic e minha), executei o teu script sem qualquer problema.

./traduzir.sh
**************************************
** TRADUTOR **
*****************MENU*****************
1-Portugues / Ingles
2-Ingles / Portugues
*-Exit
Qual a opcao desejada? 1
Introduza o que deseja traduzir e pressione Enter:
Noite
<span class="mn">
evening
<span class="prn-btn">
<span class="mn">
night
<span class="prn-btn">
<span class="mn">
nighttime
<span class="prn-btn">


Tens a certeza que tens o "bash" instalado?
Experimenta executar o script directamente com o bash:

bash traduzir.sh (podes activer o modo debug com a opcao "-x").
 
bom dia!!

é o seguinte, agora que testei melhor o script, aparecem-me um erro sempre que tento traduzir:

Introduza uma palavra:
night
sed: -e expressão #1, caracter 41: unterminated address regex
tradutor.sh: 48: Syntax error: "done" unexpected

o meu script é assim:
#!/bin/bash

inpt()
{
echo "Introduza uma palavra:"
read palavra
wget -q -O file "http://www.google.com/dictionary?aq=f&langpair=en|pt&=$palavra";
sed -n '/span class"mn"/,/<span class="prn-btn">p' file
}

ptin()
{
echo "Introduza uma palavra:"
read palavra
wget -q -O file "http://www.google.com/dictionary?langpair=pt|en&=$palavra";
sed -n '/span class"mn"/,/<span class="prn-btn">p' file
}

sair()
{
echo "O script vai terminar..."
echo ""
sleep 2 #faz uma pausa de 2 segundos no programa
exit #termina o script
}

clear # limpa o ecrã
echo "......................................."
echo ": Tradutor :"
echo ": Inglês/Português Português/Inglês :"
echo "......................................."
echo ""
echo "Menu:"
echo "1. Inglês/Português"
echo "2. Português/Inglês"
echo "3. Sair"
echo ""
read op #captura o valor e coloca na variavel op
echo ""

case $op in #inicia a estrutura de decisão case
1) inpt;; #caso o valor da variavel op seja 1, inicia a função inpt
2) ptin;;
3) sair;;
*) echo "Opção Inválida";; #caso o valor da variavel não seja nenhuma das anteriores imprime no ecrã "Opção Inválida"
esac #finaliza a estrutura de decisão case

done
por favor ajudem-me
tenho que terminar isto ate segunda feira e na sei mais que fazer....

cumprimentos
 
sim fui eu, quer dizer... esta parte "sed -n '/span class"mn"/,/<span class="prn-btn">p' file" encontrei algures no google num script parecido...

mas agora que falas no done eu tava a tentar por um ciclo no menu e esquecime de o tirar... lol
vou testar pa ver se nao tem erros...
obrigado, nao tinha reparado ;)
 
Mas quando o Condez testou isso funcionava bem.

sed -n '/<span class="mn">/,/<span class="prn-btn">/p' file (1ª versao, qd funcionava!)

Já vi esta linha escrita de 3 formas diferens no teu codigo...
Se funcionava da primeira porque alterar?
Experimenta la colocar outra vez como tinhas.

EDIT-esse erro que obtens significa que a essa tua expressão "sed ..." está mal escrita.
 
Soluçao:

Código:
#!/bin/bash

funcao_pt_ing()
{
echo "Introduza o que deseja traduzir e pressione Enter:"
read texto

wget -q -O file "http://www.google.com/dictionary?langpair=pt|en&q=$texto"; 
sed  -n  '/<span class="mn">/,/span>/p' file
}



funcao_ing_pt()

{
echo "Introduza o que deseja traduzir e pressione Enter:"
read texto

wget -q -O file "http://www.google.com/dictionary?aq=f&langpair=en|pt&q=$texto&hl=en"; 
sed  -n  '/<span class="mn">/,/span>/p' file
}

menu () {
echo "**************************************"
echo "** TRADUTOR/TRANSLATE **"
echo "*****************MENU*****************"
echo
echo
echo "1 - Portugues(Portuguese) / Ingles(English)"
echo "2 - Ingles(English) / Portugues(Portuguese)"

echo "* - Exit (*=Qq outra opcao.)"
echo
echo "Qual a opcao desejada? "
echo
read opcao
case $opcao in
1) funcao_pt_ing ;;
2) funcao_ing_pt ;;

*) echo "Opcao (1 ou 2) nao selecionada. Saindo." ; echo ; exit ;;
esac

}
menu

Nao ´e a melhor mas ja imprime a traduçao.
 
nasic, nao sei se e do meu compilador, mas depois de eu corrigir o erro como tu exemplificaste o script termina.
corri o teu script para ver e faz exactamente o mesmo!!!
agora nao compreendo... :S
 
Pode ser assim?

Código:
#!/bin/bash

Search () {
    echo "Introduza o que deseja traduzir e pressione Enter:"
    read TEXTO

    if [ $1 -eq 1 ]; then
        wget -q -O file "http://www.google.com/dictionary?langpair=pt|en&q=$TEXTO";
    else
        wget -q -O file "http://www.google.com/dictionary?aq=f&langpair=en|pt&q=$TEXTO&hl=en";
    fi
    
    perl -ne 'if (/<span class="mn">/ .. /<span class="prn-btn"|<\/span/) { print "\t - $_" unless /<|>/ }' file
}

Menu () {
    echo "**************************************"
    echo "** TRADUTOR/TRANSLATE **"
    echo "*****************MENU*****************"
    echo
    echo
    echo "1 - Portugues(Portuguese) / Ingles(English)"
    echo "2 - Ingles(English) / Portugues(Portuguese)"

    echo "* - Exit (*=Qq outra opcao.)"
    echo
    echo "Qual a opcao desejada? "
    echo
    read OPCAO
    case $OPCAO in
        1) Search 1 ;;
        2) Search 2 ;;
        *) echo "Opcao (1 ou 2) nao selecionada. Saindo." ; echo ; exit ;;
    esac
}

Menu
 
Última edição:
Back
Topo