Script - If - immer false...

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von myth88, 22.06.2009.

  1. myth88

    myth88 Haudegen

    Dabei seit:
    02.06.2007
    Beiträge:
    604
    Zustimmungen:
    0
    Ort:
    Italien
    Hi Leute,
    ich bin grad ein Script (mein erstes!) am schreiben, das automatisch die tar.bz2 SVN tarballs von aMule runterlaed, diese entpackt, als 7z packt, und dann auf einen FTP von mir uploaded...

    Nur happert es bei einer doofen IF...

    Hier mal der Code:
    Code:
    #!/bin/bash
    # this is a small script to download the last aMule tarball in tar.bz2 format, 
    # unpack it, pack it as 7z and upload it to my host...
    
    cd /mnt/storage/longtemp/emule_mods/amule
    wget http://amule.sourceforge.net/tarballs/tarballs.xml -O /mnt/storage/longtemp/emule_mods/amule/tarballs.xml
    amulerev=`cat /mnt/storage/longtemp/emule_mods/amule/tarballs.xml | grep -o youngest=\'....\' | grep -o [0-9][0-9][0-9][0-9]`
    localver=`ls /mnt/storage/longtemp/emule_mods/amule/ | grep -o [0-9][0-9][0-9][0-9] | tail -1`
    if [ "$amulerev" > "$localver" ]; then 
    	wget http://amule.sourceforge.net/tarballs/aMule-SVN-r$amulerev.tar.bz2 -O /mnt/storage/longtemp/emule_mods/amule/aMule-SVN-r$amulerev.tar.bz2
    	bunzip2 aMule-SVN-r$amulerev.tar.bz2
    	tar xvf aMule-SVN-r$amulerev.tar
    	7z a aMule-SVN-r$amulerev.7z /mnt/storage/longtemp/emule_mods/amule/aMule-SVN-r$amulerev/
    
    	HOST='meinhost.xyz.net'
    	USER='mein_user'
    	PASSWD='passwort'
    	FILE='/mnt/storage/longtemp/emule_mods/amule/aMule-SVN-r$amulerev.7z'
    
    	ftp -n $HOST 
    	quote USER $USER
    	quote PASS $PASSWD
    	cd /www/tarballs/
    	put $FILE
    	quit
    	
    else
    	echo "No new tarball found!"
    fi
    Die IF gibt immer False auf...obwohl zb. in diesem Fall $amulerev 9677 ausgibt, und $localrev 9676...
    Hat jemand eine Idee dazu?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 sim4000, 22.06.2009
    Zuletzt bearbeitet: 22.06.2009
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    Schon mal mit
    Code:
    if [ $amulerev -gt $localver ]; then 
    versucht?

    Ich gehe mal davon aus, dass beide Variablen Zahlen enthalten...

    Code:
    <12:45:53> [~] A=1
    <12:45:55> [~] B=2
    <12:45:57> [~] if [ $B -gt $A ]; then echo "muuuuh"; else echo "hehe"; fi
    muuuuh
     
  4. #3 myth88, 22.06.2009
    Zuletzt bearbeitet: 22.06.2009
    myth88

    myth88 Haudegen

    Dabei seit:
    02.06.2007
    Beiträge:
    604
    Zustimmungen:
    0
    Ort:
    Italien
    ....da bekomm ich nur: [: 29: Illegal number:

    EDIT: Es waren die Quotes...

    if [ $amulerev -gt $localver ]; then

    so geht es :)
     
  5. #4 tuxlover, 22.06.2009
    Zuletzt bearbeitet: 22.06.2009
    tuxlover

    tuxlover Der den Tux knuddelt

    Dabei seit:
    26.10.2005
    Beiträge:
    2.106
    Zustimmungen:
    0
    Ort:
    berlin
    zunächst mal ein verbeserungsvorschlag. dein cd ist unnötig. das könntets du einfach so machen.

    wget --directory-prefix=/mnt/storage/longtemp/emule_mods/amule http://amule.sourceforge.net/tarballs/tarballs.xml -O /mnt/storage/longtemp/emule_mods/amule/tarballs.xml

    dein bunzip ist auch unnötig. das ließe sich schneller mittel tar xjf in einem rutsch entpacken.

    zu deinem problem. >, < sind ja integer vergleichoperatoren. da aber ein release name aus punkten und alphanumerischen zeichen bestehen kann. würde ich es mit string comparsion versuchen. also mit den == und != Operatoren.

    ok es waren ein paar vebesserungsvorschläge:

    achja hier kommt noch einer. du könntest die Variablen die dein Script braucht am anfang setzen. das macht es übersichlticher.
     
  6. myth88

    myth88 Haudegen

    Dabei seit:
    02.06.2007
    Beiträge:
    604
    Zustimmungen:
    0
    Ort:
    Italien
    Hmm...noch funkt was beim ftp nicht...das will ich erst beheben...

    Code:
    #!/bin/bash
    # this is a small script to download the last aMule tarball in tar.bz2 format, 
    # unpack it, pack it as 7z and upload it to my host...
    
    cd /mnt/storage/longtemp/emule_mods/amule
    wget http://amule.sourceforge.net/tarballs/tarballs.xml -O /mnt/storage/longtemp/emule_mods/amule/tarballs.xml
    amulerev=`cat /mnt/storage/longtemp/emule_mods/amule/tarballs.xml | grep -o youngest=\'....\' | grep -o [0-9][0-9][0-9][0-9]`
    localver=`ls /mnt/storage/longtemp/emule_mods/amule/ | grep -o [0-9][0-9][0-9][0-9] | tail -1`
    if [ $amulerev -gt $localver ]; then 
    	wget http://amule.sourceforge.net/tarballs/aMule-SVN-r$amulerev.tar.bz2 -O /mnt/storage/longtemp/emule_mods/amule/aMule-SVN-r$amulerev.tar.bz2
    	tar xvf aMule-SVN-r$amulerev.tar.bz2
    	7z a aMule-SVN-r$amulerev.7z /mnt/storage/longtemp/emule_mods/amule/aMule-SVN-r$amulerev/
    	rm -R /mnt/storage/longtemp/emule_mods/amule/aMule-SVN-r$amulerev/
    	
    
    	HOST='meinhost'
    	USERNAME='ich'
    	PASSWD='meinpass'
    	FILE='/mnt/storage/longtemp/emule_mods/amule/aMule-SVN-r$amulerev.7z'
    
    	ftp -in
    	open $HOST
    	user $USERNAME $PASSWD
    	bin
    	put $FILE /www/tarballs/aMule-SVN-r$amulerev.7z
    	close
    	quit
    	
    else
    	echo "No new tarball found!"
    fi
    Wenn ich den script aufrufe, macht er alles, bis hin zu ftp...

    ...da passiert nichts, und er bleibt in der console stehen, mit ftp>

    Wenn ich dann manuell quit schreibe, sehe ich folgendes:

    Code:
    Couldnt get a file descriptor referring to the console
    tar.bz2.-.7z.sh: 31: user: not found
    tar.bz2.-.7z.sh: 31: bin: not found
    tar.bz2.-.7z.sh: 31: put: not found
    tar.bz2.-.7z.sh: 31: close: not found
    tar.bz2.-.7z.sh: 31: quit: not found
    
     
  7. #6 tuxlover, 22.06.2009
    tuxlover

    tuxlover Der den Tux knuddelt

    Dabei seit:
    26.10.2005
    Beiträge:
    2.106
    Zustimmungen:
    0
    Ort:
    berlin
    ich weiß des jetzt nicht so genau, aber öffnet der ftp befehl nicht einfach ne subshell.

    schau die mal das advanced bash scripting guide und das kapitel subshells an.
     
  8. #7 bytepool, 22.06.2009
    Zuletzt bearbeitet: 22.06.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    das kann ja auch nicht funktionieren. Eventuell wolltest du da ein Here-Dokument von machen?
    Code:
    	ftp -in << EOF
    	open $HOST
    	user $USERNAME $PASSWD
    	bin
    	put $FILE /www/tarballs/aMule-SVN-r${amulerev}.7z
    	close
    	quit
    	EOF
    
    mfg,
    bytepool
     
  9. myth88

    myth88 Haudegen

    Dabei seit:
    02.06.2007
    Beiträge:
    604
    Zustimmungen:
    0
    Ort:
    Italien
    Ok, EDIT!

    Nach der Aenderung wie von bytepool beschrieben:
    Code:
    #!/bin/bash
    # this is a small script to download the last aMule tarball in tar.bz2 format, 
    # unpack it, pack it as 7z and upload it to my host...
    
    cd /mnt/storage/longtemp/emule_mods/amule
    wget http://amule.sourceforge.net/tarballs/tarballs.xml -O /mnt/storage/longtemp/emule_mods/amule/tarballs.xml
    amulerev=`cat /mnt/storage/longtemp/emule_mods/amule/tarballs.xml | grep -o youngest=\'....\' | grep -o [0-9][0-9][0-9][0-9]`
    localver=`ls /mnt/storage/longtemp/emule_mods/amule/ | grep -o [0-9][0-9][0-9][0-9] | tail -1`
    if [ $amulerev -gt $localver ]; then 
    	
    	wget http://amule.sourceforge.net/tarballs/aMule-SVN-r$amulerev.tar.bz2 -O /mnt/storage/longtemp/emule_mods/amule/aMule-SVN-r$amulerev.tar.bz2
    	tar xvf aMule-SVN-r$amulerev.tar.bz2
    	7z a aMule-SVN-r$amulerev.7z /mnt/storage/longtemp/emule_mods/amule/aMule-SVN-r$amulerev/
    	rm -R /mnt/storage/longtemp/emule_mods/amule/aMule-SVN-r$amulerev/
    	
    	
    	HOST='meinhost'
    	USERNAME='ich'
    	PASSWD='meinpass'
    	FILE='/mnt/storage/longtemp/emule_mods/amule/aMule-SVN-r$amulerev.7z'
    	
    	ftp -in << EOF
    	open $HOST
    	user $USERNAME $PASSWD
    	bin
    	put $FILE /www/tarballs/aMule-SVN-r$amulerev.7z
    	close
    	quit
    	EOF
    	
    else
    	echo "No new tarball found!"
    fi
    Bekomme ich trotzdem: tar.bz2.-.7z.sh: 34: Syntax error: end of file unexpected (expecting "fi")
     
  10. Tblue

    Tblue Tripel-As

    Dabei seit:
    27.11.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Probiers mal so:
    Code:
    echo "open ${HOST}\nuser ${USERNAME} ${PASSWD}\nbin\nput ${FILE} /www/tarballs/aMule-SVN-r${amulerev}.7z\nclose\nquit" | ftp -in
    //edit: Oh, bytepool war schneller.
     
  11. myth88

    myth88 Haudegen

    Dabei seit:
    02.06.2007
    Beiträge:
    604
    Zustimmungen:
    0
    Ort:
    Italien
    Ok, schon besser, jetzt bekomm ich das expected FI nicht mehr...aber...

    local: /mnt/storage/longtemp/emule_mods/amule/aMule-SVN-r$amulerev.7z: No such file or directory
     
  12. #11 tuxlover, 22.06.2009
    tuxlover

    tuxlover Der den Tux knuddelt

    Dabei seit:
    26.10.2005
    Beiträge:
    2.106
    Zustimmungen:
    0
    Ort:
    berlin
    du hast deine variablen falsch gequotet. du muss "" statt '' nehmen.
     
  13. myth88

    myth88 Haudegen

    Dabei seit:
    02.06.2007
    Beiträge:
    604
    Zustimmungen:
    0
    Ort:
    Italien
    Ok...` geht ja auch...zumindest habe ich das oben verwendet...und ' war nur ein dummer Fehler :/

    Trotzdem bekomme ich folgendes:

    tar.bz2.-.7z.sh: 26: meinhost: not found
    tar.bz2.-.7z.sh: 26: meinusername: not found
    tar.bz2.-.7z.sh: 26: meinpass: not found
    tar.bz2.-.7z.sh: 26: /mnt/storage/longtemp/emule_mods/amule/aMule-SVN-r9679.7z: Permission denied

    Und da bleibt er haengen...bis ich CTRL-C mache....
     
  14. #13 tuxlover, 22.06.2009
    tuxlover

    tuxlover Der den Tux knuddelt

    Dabei seit:
    26.10.2005
    Beiträge:
    2.106
    Zustimmungen:
    0
    Ort:
    berlin
    ruf mal das script mit sh -x scriptname auf und poste den output hier, damit ich mal gucken kann was da eigentlich passiert.
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. myth88

    myth88 Haudegen

    Dabei seit:
    02.06.2007
    Beiträge:
    604
    Zustimmungen:
    0
    Ort:
    Italien
    Hmm...den ganzen output kann ich nicht posten...waere sehr lang, mit dem ganzen unpack und pack-kram...

    Aber das relevante ist sicher das hier:

    Code:
    Everything is Ok
    + rm -R /mnt/storage/longtemp/emule_mods/amule/aMule-SVN-r9679/
    + amule-tarballs.atbhost.net
    tar.bz2.-.7z.sh: 1: amule-tarballs.atbhost.net: not found
    + HOST=
    + meinusername
    tar.bz2.-.7z.sh: 1: meinusername: not found
    + USERNAME=
    + meinpassword
    tar.bz2.-.7z.sh: 1: meinpassword: not found
    + PASSWD=
    + /mnt/storage/longtemp/emule_mods/amule/aMule-SVN-r9679.7z
    tar.bz2.-.7z.sh: 1: /mnt/storage/longtemp/emule_mods/amule/aMule-SVN-r9679.7z: Permission denied
    + FILE=
    + echo+ ftp -in
     open \nuser  \nbin\nput  /www/tarballs/aMule-SVN-r9679.7z\nclose\nquit
    ^C(to) {MEIN CTRL-C}
    Not connected.
    Not connected.
    Not connected.
    
    Danke schonmal! :)
     
  17. #15 tuxlover, 22.06.2009
    Zuletzt bearbeitet: 22.06.2009
    tuxlover

    tuxlover Der den Tux knuddelt

    Dabei seit:
    26.10.2005
    Beiträge:
    2.106
    Zustimmungen:
    0
    Ort:
    berlin
    machst doch mal wie ich dir gesagt habe. die variablen am anfang des scripts setzen und richtig quoten. dann sollte das eigentlich laufen.
     
Thema:

Script - If - immer false...

Die Seite wird geladen...

Script - If - immer false... - Ähnliche Themen

  1. Script soll sich immer wieder neu aufrufen

    Script soll sich immer wieder neu aufrufen: Hallo Leute, Da ich noch ein rechter Frischling bin was Shellprogrammierung betrifft, bin ich ja schon heilfroh dass mir das eine oder andere...
  2. Bräuchte Hilfe bei Backupscript mittels Bash und cronjob

    Bräuchte Hilfe bei Backupscript mittels Bash und cronjob: Es soll für bestimmte Ordner Archivierung aller Dateien(Logfiles), die älter als 30 Tage sind machen. Am besten einmal täglich nachts irgendwann....
  3. Bashscript aus Debian6 läuft nicht auf Debian7

    Bashscript aus Debian6 läuft nicht auf Debian7: Hallo an alle, nachdem ich ein Skript von squeeze auf wheezy kopiert habe und ausführte, erschienen gleich wilde Fehlermeldungen, nach denen ich...
  4. Shell Script Problem

    Shell Script Problem: Hallo zusammen, ich arbeite momentan mit einem Plagiat Tool, die ich über Git Bash ausführe. Es wird im Endeffekt ein Link generiert, die ich...
  5. Externes Programm mit Script ausführen?

    Externes Programm mit Script ausführen?: Hallo, ich würde gern ein Script zum klonen von festplatten schreiben z.B. mit dem Programm Mondo Rescue. Ist es möglich externen Programmen...