1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Problema em Shell Script.

Discussão em 'Programação' iniciada por T_Reis05, 14 de Novembro de 2008. (Respostas: 11; Visualizações: 1433)

  1. T_Reis05

    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: 14 de Novembro de 2008
  2. nasic

    nasic Power Member

    Não tenho aqui nenhuma compilador à mão.
    Podes fazer isto
    "Opcao desconhecida." ; echo ; ?
    nao será antes assim:
    echo "Opcao desconhecida." ; ?
     
  3. T_Reis05

    T_Reis05 Power Member

    Hum tentei fazer isso, mas o erro continuou... :S
     
  4. Condez

    Condez [email protected] Member

    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").
     
  5. bom dia!!

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

    o meu script é assim:
    por favor ajudem-me
    tenho que terminar isto ate segunda feira e na sei mais que fazer....

    cumprimentos
     
  6. nasic

    nasic Power Member

    "done" é utilizado apenas em ciclos, logo experimenta tirar essa linha, compilar e correr.
    foste tu que escreveste esse programa?
     
  7. 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 ;)
     
  8. boas outra vez...

    agora surge-me outro problema:
    nao sei como resolver isto, alguem me pode ajudar???
    cumprimentos
     
  9. nasic

    nasic Power Member

    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.
     
  10. nasic

    nasic Power Member

    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.
     
  11. 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
     
  12. slack_guy

    slack_guy Power Member

    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: 17 de Novembro de 2008

Partilhar esta Página