Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Bash Script bleibt einfach stehen...

  1. #1
    Registrierter Benutzer
    Registriert seit
    07.03.2004
    Beiträge
    24

    Unhappy Bash Script bleibt einfach stehen...

    Also ich hab ein kleines Shell Script. Jetzt hab ich aber das Problem das es einfach stehen bleibt - keine Fehlermeldung - einfach nix. Wenn ich das ganze Schritt für Schritt in einer Konsole manuel mache, dann gehts ohne Probleme! Komisch

    Also das ist der Teil von Bash Script:
    Code:
    if [ $1 = "--update" ]
    then
    cd /tmp/
    #### Aktualisieren der discr ####
    discrz=0
    wget http://jdcvs.sourceforge.net/home/discr 2> /tmp/jdcvs-wget-discr >> /tmp/jdcvs-wget-discr
    wget http://jdcvs.sourceforge.net/home/discr2 2> /tmp/jdcvs-wget-discr2 >> /tmp/jdcvs-wget-discr2
    
    schleife=$(grep "entries=" /tmp/discr | sed s/entries=//g)
    
    while [ $schleife != 0 ] 2> /dev/null
    do
    
    echo $schleife
    #####################
    #### HIER BLEIBT ER STEHEN!##
    #####################
    appsname=$(grep "§$schleife=" /tmp/discr | sed s/"§$schleife"=//g)
    if [ $(grep -c $appsname ~/.jdcvs/discr) = 0 ]
    then
    
    discrname=$(grep "§$schleife=" /tmp/discr | sed s/§$schleife=//g)
    discr=$(grep $discrname /tmp/discr2 | sed s/$discrname=//g)
    discrz=$(expr $discrz + 1)
    echo "$discrname=$discr" >> ~/.jdcvs/discr
    fi
    
    schleife=$(expr $schleife - 1)
    done
    
    rm /tmp/discr
    rm /tmp/discr2
    echo -e "\n$discrz $(grep "§77=" ~/.jdcvs/lang/$lang | sed s/§77=//g)"
    #### Aktualisieren der sources ####
    cd /tmp
    sourcesz=0
    wget http://jdcvs.sourceforge.net/home/sources 2> /tmp/jdcvs-wget-sources >> /tmp/jdcvs-wget-sources
    wget http://jdcvs.sourceforge.net/home/sources2 2> /tmp/jdcvs-wget-sources2 >> /tmp/jdcvs-wget-sources2
    
    schleife=$(grep "entries=" /tmp/sources | sed s/entries=//g)
    
    while [ $schleife != 0 ]
    do
    if [ $(grep -c $(grep "§$schleife=" /tmp/sources | sed s/§$schleife=//g) ~/.jdcvs/sources) = 0 ]
    then
    sourcesname=$(grep "§$schleife=" /tmp/sources | sed s/§$schleife=//g)
    sources=$(grep $sourcesname /tmp/sources2 | sed s/$sourcesname=//g)
    sourcesz=$(expr $sourcesz + 1)
    echo "$sourcesname§$sources" >> ~/.jdcvs/sources
    
    fi
    schleife=$(expr $schleife - 1)
    done
    rm /tmp/sources
    rm /tmp/sources2
    echo -e "$sourcesz $(grep "§79=" ~/.jdcvs/lang/$lang | sed s/§79=//g)\n"
    
    exit
    fi
    Die /tmp/discr sieht dann ungefähr so aus:
    entries=33

    §33=multisync
    §32=atlantik
    §31=krecipes
    §30=fhp
    §29=feta
    §28=epiphany
    ...
    Geht dann natürlich bis §1 weiter.
    Die /tmp/discr2 sieht dann so aus:
    entries=33

    kdebluetooth=The KDE Bluetooth Framework is a set of tools built on top of Linux\' Bluetooth stack BlueZ
    multisync=MultiSync is a program to synchronize calendars, addressbooks and other PIM data between programs on your computer and other computers, mobile devices, PDAs or cell phones.
    atlantik=Atlantik is the leading open-source game client for Monopoly®-like board games to be played on the monopd network.
    krecipes=Krecipes is a new Open Source project for an exciting world that is almost forgotten in the Tux world: COOKING (yummy! ;-)
    gcc=GCC is the GNU Compiler Collection, which currently contains front ends for C, C++, Objective-C, Fortran, Java, and Ada
    Geht natürlich auch noch weiter.
    Aber was ist daran nun falsch? Ich versteh das einfach nicht
    Ohne Fehlermeldung - und auf der Konsole geht es ohne murren...

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    mir scheint Grep hat irgendwelche Probleme mit dem § in Dateien - anders kann ich mir das nicht erklären.

    Wirklich merkwürdig die Sache.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    if [ $(grep -c $(grep "§$schleife=" /tmp/sources | sed s/§$schleife=//g) ~/.jdcv

    dz solltest nach der if anweisung noch einen echo block einbauen und testen ob die eingabe dort noch einmal rescheint.
    außerdem muss das $ in dem grep seartchtext durch ein \$ ersetzt werden, da sonst ein zeilenende gemeint wäre.
    Dasselbe gilt afaik auch für sed

  4. #4
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Zitat Zitat von msi
    außerdem muss das $ in dem grep seartchtext durch ein \$ ersetzt werden, da sonst ein zeilenende gemeint wäre.
    Dasselbe gilt afaik auch für sed
    Nein. Weil das $irgendwas wird durch die bash behandelt, nicht durch sed oder Grep (ausser du hast einfache Anführungszeichen drumherum, dann werden die Variablen nicht eingesetzt) - d.h. sed und Grep kriegen den Inhalt der Variable geliefert - also die expandierte Version. Die sehen gar kein $ mehr.

    Ausserdem steht das $ nur für Zeilenende wenn es am Ende eines Grep/Sed-Ausdrucks steht. Sonst ist es ein ganz normales Zeichen.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  5. #5
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Hmm, wenn ich manuell
    schleife=33
    vor Schleifenbeginn setze gehts weiter

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.12.1999
    Ort
    Stuttgart
    Beiträge
    259
    Hi,

    die Datei /tmp/discr ist im Windowsformat, deshalb wurde $schleife nicht als
    Zahl erkannt (expr: non-numeric argument).
    Nachdem ich die Datei mit dos2unix konvertiert habe, gabs noch eine Fehlermeldung bei der If-Anweisung: [: =: unary operator expected

    So funktionierts zumindest bei mir:

    Code:
     #!/bin/bash
    
    cd /tmp/
    #### Aktualisieren der discr ####
    discrz=0
    wget http://jdcvs.sourceforge.net/home/discr 2> /tmp/jdcvs-wget-discr >> /tmp/jdcvs-wget-discr
    wget http://jdcvs.sourceforge.net/home/discr2 2> /tmp/jdcvs-wget-discr2 >> /tmp/jdcvs-wget-discr2
    
    dos2unix /tmp/discr
    
    schleife=$(grep "entries=" /tmp/discr | sed s/entries=//g)
    
    while [ $schleife != 0 ]; do
      echo $schleife
      appsname=$(grep "$schleife=" /tmp/discr | cut -d '=' -f 2)
    
      if [ -z "$(grep $appsname ~/.jdcvs/discr 2>/dev/null)" ]; then
        discrname=$appsname
        discr=$(grep $discrname /tmp/discr2 | sed s/$discrname=//g)
        discrz=$(expr $discrz + 1)
        echo "$discrname=$discr" >> ~/.jdcvs/discr
      fi
    
      schleife=$(expr $schleife - 1)
    done
    Gruß
    micha

    P.S.: Für das '§'-Zeichen hab ich keine Lösung außer weglassen gefunden.
    IRC: irc.euirc.net #tux

  7. #7
    Registrierter Benutzer
    Registriert seit
    07.03.2004
    Beiträge
    24
    Zitat Zitat von micha
    Hi,

    die Datei /tmp/discr ist im Windowsformat, deshalb wurde $schleife nicht als
    Zahl erkannt (expr: non-numeric argument).
    Nachdem ich die Datei mit dos2unix konvertiert habe, gabs noch eine Fehlermeldung bei der If-Anweisung: [: =: unary operator expected

    So funktionierts zumindest bei mir:

    Code:
     #!/bin/bash
    
    cd /tmp/
    #### Aktualisieren der discr ####
    discrz=0
    wget http://jdcvs.sourceforge.net/home/discr 2> /tmp/jdcvs-wget-discr >> /tmp/jdcvs-wget-discr
    wget http://jdcvs.sourceforge.net/home/discr2 2> /tmp/jdcvs-wget-discr2 >> /tmp/jdcvs-wget-discr2
    
    dos2unix /tmp/discr
    
    schleife=$(grep "entries=" /tmp/discr | sed s/entries=//g)
    
    while [ $schleife != 0 ]; do
      echo $schleife
      appsname=$(grep "$schleife=" /tmp/discr | cut -d '=' -f 2)
    
      if [ -z "$(grep $appsname ~/.jdcvs/discr 2>/dev/null)" ]; then
        discrname=$appsname
        discr=$(grep $discrname /tmp/discr2 | sed s/$discrname=//g)
        discrz=$(expr $discrz + 1)
        echo "$discrname=$discr" >> ~/.jdcvs/discr
      fi
    
      schleife=$(expr $schleife - 1)
    done
    Gruß
    micha

    P.S.: Für das '§'-Zeichen hab ich keine Lösung außer weglassen gefunden.
    Danke, das hatte ich nun auch schon vorher rausbekommen, aber trotzdem Danke
    Wenn mir jetzt noch einer sagen könnte warum das im Dos Format vorliegt wäre das sehr nett... Nicht jeder hat dos2unix und es wäre schöner wenn es nicht unbedingt gebraucht wird.
    Natürlich geht es auch so...

    Das ganze liegt auf einem sf.net Server und die Datei kann online editiert werde, das Teil dafür ist in PHP geschrieben. Liegt das jetzt an PHP oder am sf Server?

  8. #8
    Registrierter Benutzer
    Registriert seit
    25.12.1999
    Ort
    Stuttgart
    Beiträge
    259

    dos2unix

    Statts

    Code:
    dos2unix /tmp/discr
    geht auch

    Code:
    recode ibmpc..lat1 /tmp/discr
    Gruß,
    micha
    IRC: irc.euirc.net #tux

  9. #9
    Registrierter Benutzer
    Registriert seit
    07.03.2004
    Beiträge
    24
    Code:
    recode ibmpc..lat1 /tmp/discr
    Da würde ich dann den Fehler hier bekommen:
    ecode: discr failed: Mehrdeutige Ausgabe in step `CR-LF..data'
    Naja, mit dos2unix gehts ja erstmal...

Lesezeichen

Berechtigungen

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