Anzeige:
Ergebnis 1 bis 14 von 14

Thema: Bashscript -> ")syntax error: operand expected (error token is "

  1. #1
    Registrierter Benutzer
    Registriert seit
    May 2004
    Ort
    Wilhermsdorf
    Beiträge
    487

    Bashscript -> ")syntax error: operand expected (error token is "

    Hi,
    ich habe ein kleines Probelm mit einem Script, das ich zur Zeit schreibe.
    Es gibt eine Variable $CUT die wie folgt aufgebaut ist:
    Code:
    -start 0:03:57.398 -duration 0:14:33.892 -start 0:22:35.476 -duration 0:43:07.923 -start 1:09:28.960 -duration 0:36:03.577
    Diese Zeiten will ich nun in Frames umwandeln. Das schaut bei mir wie folgt aus:
    Code:
    let cutcount=1*2   
    
    start_end ()
    {
    forcut=`echo $CUT | cut -d " " -f $cutcount`
    if [ $COUNT = 0 ]; then 
        echo "feritg"
    else
        for s in $forcut; do
        echo $forcut
        ss1=${s%%.*}
        ss=${ss1##*:}
        mm1=${s%%:??.???}
        mm=${mm1##*:}
        hh=${s%%:??:??.???}
        let ss2=$ss
        let mm2=$mm
        let hh2=$hh
        fss=$ss2*25
        fmm=25*60*$mm2
        fhh=25*60*60*$hh2
        let fps=$fss+$fmm+$fhh
        echo $fps >> $PWD/.cut
        let cutcount++
        let cutcount++
        let COUNT--
        forcut=`echo $CUT | cut -d " " -f $cutcount`
        done
    fi
    }
    Das komplette Scrip sieht wie folgt aus:
    Code:
    #!/bin/bash
    
    ver=0.1
    COUNT=0
    
    echo "$0 Version: $ver"
    
    for i in $1; do
        CUTLIST=`basename $i`
        CUTLIST=${CUTLIST/.avi/}.cutlist
        cd $PWD
        wget -q http://cutlist.de/upload/$CUTLIST &&
        echo "$CUTLIST heruntergeladen."
        if [ ! -f $CUTLIST ]; then
            echo "$CUTLIST nicht gefunden!"
        fi
        if [ -f $CUTLIST ]; then
        CUT=`grep CutCommandLine $CUTLIST | cut -d= -f2`
        OF=`grep  NoOfCuts $CUTLIST | cut -d= -f2`
        echo $CUT
        COUNT=$OF
        let cutcount=1*2   
    
    start_end ()
    {
    forcut=`echo $CUT | cut -d " " -f $cutcount`
    if [ $COUNT = 0 ]; then 
        echo "feritg"
    else
        for s in $forcut; do
        echo $forcut
        ss1=${s%%.*}
        ss=${ss1##*:}
        mm1=${s%%:??.???}
        mm=${mm1##*:}
        hh=${s%%:??:??.???}
        let ss2=$ss
        let mm2=$mm
        let hh2=$hh
        fss=$ss2*25
        fmm=25*60*$mm2
        fhh=25*60*60*$hh2
        let fps=$fss+$fmm+$fhh
        echo $fps >> $PWD/.cut
        let cutcount++
        let cutcount++
        let COUNT--
        forcut=`echo $CUT | cut -d " " -f $cutcount`
        done
    fi
    }
    start_end
    fi
    done
    Wenn cih das Scrip nun Starte bekomme ich folgende Meltung:
    Code:
    siggi@Luzifer:/son/otr> ~/bash/avi Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.avi
    /home/siggi/bash/avi Version: 0.1
    Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.cutlist heruntergeladen.
    -start 0:03:57.398 -duration 0:14:33.892 -start 0:22:35.476 -duration 0:43:07.923 -start 1:09:28.960 -duration 0:36:03.577
    0:03:57.398
    ")syntax error: operand expected (error token is "
    Was soll mir das ")syntax error: operand expected (error token is " sagen?

    dsiggi

  2. #2
    Krachinformatiker Avatar von Escorte2
    Registriert seit
    Jan 2002
    Beiträge
    89
    Zitat Zitat von dsiggi
    Was soll mir das ")syntax error: operand expected (error token is " sagen?
    Das soll Dir sagen dass da ein Fehler iss...

    Von hier aus schwer zu sagen wo der auftritt.

    An Deiner Stelle würde ich mal ein paar Kontroll-echos einbauen, um herauszufinden in welcher Zeile der Fehler passiert...

    E2

  3. #3
    Registrierter Benutzer Avatar von Hitman
    Registriert seit
    May 2002
    Ort
    Rhein-Main-Gebiet
    Beiträge
    482
    Vermute den Fehler in der Zeile:

    forcut=`echo $CUT | cut -d " " -f $cutcount`

    Der Delimeter "Leerzeichen" wird falsch angegeben, da du ja für den Befehl eine Subshell aufmachst.

    Versuchs mal mit:

    forcut=`echo $CUT | cut -d' ' -f $cutcount`

  4. #4
    Vivika
    Gast
    Versuche mal das Skript mit sh -x scriptname 2>err.txt zu starten, und den Fehler zu analysieren.
    Gruß

  5. #5
    Registrierter Benutzer
    Registriert seit
    May 2004
    Ort
    Wilhermsdorf
    Beiträge
    487
    Hi,

    @Hitman:
    Hat leider nicht funktioniert.

    @Vivika:

    Hier ist die err.txt
    Code:
    + ver=0.1
    + COUNT=0
    + echo '/home/siggi/bash/avi Version: 0.1'
    + for i in '$1'
    ++ basename Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.avi
    + CUTLIST=Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.avi
    + CUTLIST=Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.cutlist
    + cd /son/otr
    + wget -q http://cutlist.de/upload/Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.cutlist
    + echo 'Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.cutlist heruntergeladen.'
    + '[' '!' -f Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.cutlist ']'
    + '[' -f Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.cutlist ']'
    ++ cut -d= -f2
    ++ grep CutCommandLine Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.cutlist
    + CUT=' -start 0:03:57.398 -duration 0:14:33.892 -start 0:22:35.476 -duration 0:43:07.923 -start 1:09:28.960 -duration 0:36:03.577
    '
    ++ grep NoOfCuts Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.cutlist
    ++ cut -d= -f2
    + OF=$'3\r'
    + echo -start 0:03:57.398 -duration 0:14:33.892 -start 0:22:35.476 -duration 0:43:07.923 -start 1:09:28.960 -duration $'0:36:03.577\r'
    + COUNT=$'3\r'
    + let 'cutcount=1*2'
    + start_end
    ++ echo -start 0:03:57.398 -duration 0:14:33.892 -start 0:22:35.476 -duration 0:43:07.923 -start 1:09:28.960 -duration $'0:36:03.577\r'
    ++ cut '-d ' -f 2
    + forcut=0:03:57.398
    + '[' $'3\r' = 0 ']'
    + for s in '$forcut'
    + echo 0:03:57.398
    + ss1=0:03:57
    + ss=57
    + mm1=0:03
    + mm=03
    + hh=0
    + let ss2=57
    + let mm2=03
    + let hh2=0
    + fss='57*25'
    + fmm='25*60*3'
    + fhh='25*60*60*0'
    + let 'fps=57*25+25*60*3+25*60*60*0'
    + echo 5925
    + let cutcount++
    + let cutcount++
    + let COUNT--
    /home/siggi/bash/avi: line 47: let: 3
    : syntax error: operand expected (error token is "
    ")
    ++ echo -start 0:03:57.398 -duration 0:14:33.892 -start 0:22:35.476 -duration 0:43:07.923 -start 1:09:28.960 -duration $'0:36:03.577\r'
    ++ cut '-d ' -f 4
    + forcut=0:14:33.892
    Ich galube es hat etwas mit der Zeile
    Code:
    let COUNT--
    zu tun.
    Ich weis aber nicht warum. Die Variable COUNT hat in diesem Fall den Wert 3, also müsste das COUNT-- doch funktionieren.

    dsiggi

  6. #6
    Flachinformatiker Avatar von MiGo
    Registriert seit
    Oct 2002
    Ort
    Heidelberg
    Beiträge
    5.270
    [edit] Anscheinend das Lesen verlernt...
    "Da steht sowas ähnliches wie" oder "das funzt net!!" ist keine Fehlermeldung!

  7. #7
    Registrierter Benutzer
    Registriert seit
    May 2004
    Ort
    Wilhermsdorf
    Beiträge
    487
    Zitat Zitat von MiGo
    [edit] Anscheinend das Lesen verlernt...
    ???
    *zehnzeichen*

  8. #8
    Krachinformatiker Avatar von Escorte2
    Registriert seit
    Jan 2002
    Beiträge
    89
    Da steht COUNT=$'3\r' ... \r ist ein carriage return
    Und let mag das überhaupt nicht...

    Ich würde vorschlagen Du schneidest das \r mal ab:
    OF=$(grep NoOfCuts $CUTLIST | cut -d= -f2|tr -d "\r")

    E2
    edit:typo
    Geändert von Escorte2 (07.07.06 um 07:34 Uhr)

  9. #9
    Flachinformatiker Avatar von MiGo
    Registriert seit
    Oct 2002
    Ort
    Heidelberg
    Beiträge
    5.270
    ???
    *zehnzeichen*
    Will sagen: Nicht richtig gelesen, Blödsinn geantwortet, gemerkt und den Blödsinn wieder gelöscht.

    Geht's wenn du
    let COUNT--
    durch
    COUNT=$COUNT-1
    ersetzt?
    Komische Frage, aber sonst fällt mir dazu auch nichts ein.
    [und schon wieder edit] Das meines Vorposters ist wesentlich richtiger als mein Vorschlag Damit geht's nämlich nicht.
    Geändert von MiGo (07.07.06 um 07:38 Uhr)
    "Da steht sowas ähnliches wie" oder "das funzt net!!" ist keine Fehlermeldung!

  10. #10
    Registrierter Benutzer
    Registriert seit
    May 2004
    Ort
    Wilhermsdorf
    Beiträge
    487
    Zitat Zitat von Escorte2
    Da steht COUNT=$'3\r' ... \r ist ein carriage return
    Und let mag das überhaupt nicht...

    Ich würde vorschlagen Du schneidest das \r mal ab:
    OF=$(grep NoOfCuts $CUTLIST | cut -d= -f2|tr -d "\r")

    E2
    edit:typo
    Code:
    tr: Ungültige Option -- \
    „tr --help“ gibt weitere Informationen.
    tr scheint das "\" nicht zu mögen.

    dsiggi

  11. #11
    Krachinformatiker Avatar von Escorte2
    Registriert seit
    Jan 2002
    Beiträge
    89
    Kannst Du bitte nochmal den "err.txt" von sh -x scriptname 2>err.txt posten!?

    E2

  12. #12
    Registrierter Benutzer
    Registriert seit
    May 2004
    Ort
    Wilhermsdorf
    Beiträge
    487
    Hi,
    Code:
    + ver=0.1
    + COUNT=0
    + echo '/home/siggi/bash/avi Version: 0.1'
    + for i in '$1'
    ++ basename Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.avi
    + CUTLIST=Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.avi
    + CUTLIST=Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.cutlist
    + cd /son/otr
    + wget -q http://cutlist.de/upload/Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.cutlist
    + echo 'Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.cutlist heruntergeladen.'
    + '[' '!' -f Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.cutlist ']'
    + '[' -f Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.cutlist ']'
    ++ grep CutCommandLine Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.cutlist
    ++ cut -d= -f2
    + CUT=' -start 0:03:57.398 -duration 0:14:33.892 -start 0:22:35.476 -duration 0:43:07.923 -start 1:09:28.960 -duration 0:36:03.577
    '
    ++ grep NoOfCuts Jeepers_Creepers_2_06.07.01_22-05_pro7_105_TVOON_DE.mpg.cutlist
    ++ cut -d= -f2
    ++ tr '-d\r'
    tr: Ungültige Option -- \
    „tr --help“ gibt weitere Informationen.
    + OF=
    + echo -start 0:03:57.398 -duration 0:14:33.892 -start 0:22:35.476 -duration 0:43:07.923 -start 1:09:28.960 -duration $'0:36:03.577\r'
    + COUNT=
    + let 'cutcount=1*2'
    + start_end
    ++ echo -start 0:03:57.398 -duration 0:14:33.892 -start 0:22:35.476 -duration 0:43:07.923 -start 1:09:28.960 -duration $'0:36:03.577\r'
    ++ cut '-d ' -f 2
    + forcut=0:03:57.398
    + '[' = 0 ']'
    /home/siggi/bash/avi: line 27: [: =: unary operator expected
    + for s in '$forcut'
    + echo 0:03:57.398
    + ss1=0:03:57
    + ss=57
    + mm1=0:03
    + mm=03
    + hh=0
    + let ss2=57
    + let mm2=03
    + let hh2=0
    + fss='57*25'
    + fmm='25*60*3'
    + fhh='25*60*60*0'
    + let 'fps=57*25+25*60*3+25*60*60*0'
    + echo 5925
    + let cutcount++
    + let cutcount++
    + let COUNT--
    ++ echo -start 0:03:57.398 -duration 0:14:33.892 -start 0:22:35.476 -duration 0:43:07.923 -start 1:09:28.960 -duration $'0:36:03.577\r'
    ++ cut '-d ' -f 4
    + forcut=0:14:33.892
    dsiggi

    PS: Was bedeutet das + bzw. das ++ vor den Zeilen?

  13. #13
    Krachinformatiker Avatar von Escorte2
    Registriert seit
    Jan 2002
    Beiträge
    89
    Da fehlt ein space: tr -d\r ... es muss tr -d \r sein.

    Die Pluszeichen zeigen die Debug-Schritte der Shell an. Das "-x" beim Ausführen leitet den Debug-Modus ein, so dass man leichter Fehler finden kann.

  14. #14
    Registrierter Benutzer
    Registriert seit
    May 2004
    Ort
    Wilhermsdorf
    Beiträge
    487
    Cool, jetzt gehts.
    Wie schaffe ich es etz, damit die for-Schleife so oft durchlaufen wird bis $COUNT = 0?
    Jetzt durchläuft er sie nämlich nur einmal.

    dsiggi

Ähnliche Themen

  1. Modem -> Router -> funk -> Router -> Suse = langsame Verbindung
    Von susenewbie im Forum Router und Netzaufbau
    Antworten: 1
    Letzter Beitrag: 24.03.05, 13:32
  2. Antworten: 0
    Letzter Beitrag: 25.11.03, 08:27
  3. Antworten: 4
    Letzter Beitrag: 06.05.03, 10:12

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •