Pagina 1 di 1

[RISOLTO] Errore DONE in script!!!

Inviato: martedì 14 marzo 2017, 12:15
da ducarpit
Ciao a tutti,
ho un problema con questo script:

Codice: Seleziona tutto

#!/bin/bash
prog=0
prog_usr=0
iva_tmp=0

cat Utenti.txt | while read LINE;
do
    nome=$(echo $LINE|cut -f1 -d,)
    cognome=$(echo $LINE|cut -f2 -d,)
    piva=$(echo $LINE|cut -f3 -d,)

    if[ $iva_tmp = $piva ] then
    {
        if[ -e "completo/${piva}.xml" ] then
        {
                prog_usr=$((prog_usr+1))
                cat utenti.xml | sed "s/NOME/${nome}/g" | sed "s/SURNAME/${cognome}/g" | sed "s/PROGRESSIVO/${prog_usr}" >> completo/${piva}.xml
        }else{
                prog_usr=0
                echo '<?xml version="1.0" encoding="utf-8" ?>' > completo/${piva}.xml
                echo '<anagrafiche xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance">' >> completo/${piva}.xml
                cat utenti.xml | sed "s/NOME/${nome}/g" | sed "s/SURNAME/${cognome}/g" >> completo/${piva}.xml
        }fi
    }else{
        if[ $iva_tmp = "0" ] then
        {
                echo '</anagrafiche>' >> completo/${iva_tmp}.xml
        }fi
        prog=$((prog+1))
        cat guida.xml | sed "s/IVA/${piva}" | sed "s/PROGRESSIVO/${prog}/g" | > completo/G${piva}.xml
        iva_tmp=$piva
    }fi
done
exit 0
Quando lo vado ad eseguire, mi da questo errore:

Codice: Seleziona tutto

./script.sh: riga 33: errore di sintassi vicino al token non atteso "done"
./script.sh: riga 33: `done'
Coma mai? sapete aiutarmi? Grazie mille
Christian

PS: se può essere utili: lo esegue con il comando ./[nomescript.sh]

Re: Errore DONE in script!!!

Inviato: martedì 14 marzo 2017, 18:48
da melfnt
ducarpit [url=http://forum.ubuntu-it.org/viewtopic.php?p=4965992#p4965992][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Ciao a tutti,
ho un problema con questo script:

Codice: Seleziona tutto

#!/bin/bash
prog=0
prog_usr=0
iva_tmp=0

cat Utenti.txt | while read LINE;
do
    nome=$(echo $LINE|cut -f1 -d,)
    cognome=$(echo $LINE|cut -f2 -d,)
    piva=$(echo $LINE|cut -f3 -d,)

    if[ $iva_tmp = $piva ] then
    {
        if[ -e "completo/${piva}.xml" ] then
        {
                prog_usr=$((prog_usr+1))
                cat utenti.xml | sed "s/NOME/${nome}/g" | sed "s/SURNAME/${cognome}/g" | sed "s/PROGRESSIVO/${prog_usr}" >> completo/${piva}.xml
        }else{
                prog_usr=0
                echo '<?xml version="1.0" encoding="utf-8" ?>' > completo/${piva}.xml
                echo '<anagrafiche xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance">' >> completo/${piva}.xml
                cat utenti.xml | sed "s/NOME/${nome}/g" | sed "s/SURNAME/${cognome}/g" >> completo/${piva}.xml
        }fi
    }else{
        if[ $iva_tmp = "0" ] then
        {
                echo '</anagrafiche>' >> completo/${iva_tmp}.xml
        }fi
        prog=$((prog+1))
        cat guida.xml | sed "s/IVA/${piva}" | sed "s/PROGRESSIVO/${prog}/g" | > completo/G${piva}.xml
        iva_tmp=$piva
    }fi
done
exit 0
Quando lo vado ad eseguire, mi da questo errore:

Codice: Seleziona tutto

./script.sh: riga 33: errore di sintassi vicino al token non atteso "done"
./script.sh: riga 33: `done'
Coma mai? sapete aiutarmi? Grazie mille
Christian

PS: se può essere utili: lo esegue con il comando ./[nomescript.sh]
Guarda la sintassi dell'if. Non servono le parentesi graffe, ma solo then e fi

Re: Errore DONE in script!!!

Inviato: mercoledì 15 marzo 2017, 20:00
da crap0101

Codice: Seleziona tutto

        if[ $iva_tmp = "0" ] then
(e anche altri due) le parentesi devono essere staccate da `if`

Codice: Seleziona tutto

        cat guida.xml | sed "s/IVA/${piva}" | sed "s/PROGRESSIVO/${prog}/g" | > completo/G${piva}.xml
il `| >` ben che vada ti crea un file vuoto

Re: Errore DONE in script!!!

Inviato: domenica 19 marzo 2017, 9:28
da ducarpit
Ok, grazie perfetto funziona!!!
Le parentesi le avevo inserite per un precedente errore, la sintassi la conoscevo.
Per il file giustamente come da voi detto ben che vado lo scrive sul file ma è roprio quello che voglio quindi OK anche per quello.
Grazie ancora