Logscript

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Ocean-Driver, 10.06.2007.

  1. #1 Ocean-Driver, 10.06.2007
    Zuletzt bearbeitet: 10.06.2007
    Ocean-Driver

    Ocean-Driver Routinier

    Dabei seit:
    02.06.2004
    Beiträge:
    258
    Zustimmungen:
    0
    Ort:
    Germany
    Hi,

    Ich find den Fehler einfach nichtmehr (Uhrzeit? ^^)

    Vieleicht seht ihr den Fehler ja.. Danke

    Code:
    #!/bin/bash
    
    #Verzeichnis wo die Logs gespeichert werden sollen
    logs=/Daten/logs
    
    if [ -e '$logs' ];
    	then 
    	echo "Logverzeichnis wurde gefunden" 
    	fi
    
    		else
    		echo "Das Logverzeichnis wurde nicht gefunden, es wird erstellt"
    		mkdir $logs
    		fi
    
    cd $logs
    
    # Abfrage ob Verzeichnis bereits existiert oder nicht
    if [ -e '"$(date '+%d.%m.%y')"'];
    
    then echo "Verzeichnis für den heuten Tag wurde gefunden" fi
    
     else 
     echo "Das Logverzeichnis für den heutigen Tag wird erstellt"
    mkdir "$(date '+%d.%m.%y')";
    fi
    
    cd    "$(date '+%d.%m.%y')"
    touch "$(date '+%H:%m:%S_prozesse.log')"
    ps aux > "$(date '+%H:%m:%S_prozesse.log')"
    
    
    Fehler

    ./process.sh: line 11: syntax error near unexpected tokel ´else´
    ./process.sh: line 11: ´ else´
     
  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 Wolfgang, 10.06.2007
    Zuletzt bearbeitet: 10.06.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Code:
    #Verzeichnis wo die Logs gespeichert werden sollen
    logs=/Daten/logs
    
    if [ -e '$logs' ];
    	then 
    	echo "Logverzeichnis wurde gefunden" 
    	[color=red][b]fi[/b][/color]
                           else
    
    Dein fi kommt vor else.

    Gruß Wolfgang
     
  4. #3 Ocean-Driver, 10.06.2007
    Ocean-Driver

    Ocean-Driver Routinier

    Dabei seit:
    02.06.2004
    Beiträge:
    258
    Zustimmungen:
    0
    Ort:
    Germany
  5. #4 z-shell, 10.06.2007
    Zuletzt bearbeitet: 10.06.2007
    z-shell

    z-shell Debianator

    Dabei seit:
    30.05.2007
    Beiträge:
    434
    Zustimmungen:
    0
    Ort:
    /home/z-shell
    Code:
    if [ Bedingung ]
    then
    
            Befehle
    
    else
    
            Befehle
    
    fi
    Oder:
    Code:
    if [ Bedingung ]; then
    
            Befehle
    
    else
    
            Befehle
    
    fi
    Du kannst auch mehrere is verschachteln:
    Code:
    if [ Bedingung ]
    then
    
    
            Befehle
    
    elif [ BEdingung ]
    then
    
            Befehle
    
    fi
    fi
    Dann brauchst du aber entsprechend mehr "abschluss fis"
     
  6. #5 Ocean-Driver, 10.06.2007
    Ocean-Driver

    Ocean-Driver Routinier

    Dabei seit:
    02.06.2004
    Beiträge:
    258
    Zustimmungen:
    0
    Ort:
    Germany
    Hi,

    Mein aktueller Code:

    Code:
    #!/bin/bash
    
    #Verzeichnis wo die Logs gespeichert werden sollen
    logs=/Daten/logs
    
    if [[ -e '$logs' ]];
    	then 
    	echo "Das allgemeine Logverzeichnis wurde gefunden" 
    		
    
    		else
    		echo "Das Logverzeichnis wurde nicht gefunden, es wird erstellt"
    		mkdir $logs
    		fi
    
    cd $logs
    
    # Abfrage ob Verzeichnis bereits existiert oder nicht
    if [[ -e '"$(date '+%d.%m.%y')"']];
    
    then echo "Verzeichnis für den heuten Tag wurde gefunden" fi
    
     else 
     echo "Das Logverzeichnis für den heutigen Tag wird erstellt"
    mkdir "$(date '+%d.%m.%y')";
    fi
    
    cd    "$(date '+%d.%m.%y')"
    touch "$(date '+%H:%m:%S_prozesse.log')"
    ps aux > "$(date '+%H:%m:%S_prozesse.log')"
    
    
    Die If-Abfrage "if [[ -e '$logs' ]];"

    gibt trotzdem ein false zurück ("Das Logverzeichnis wurde nicht gefunden, es wird erstellt - was stimmt da nicht?
    Ich hab logs auch schon so definiert

    logs=/Daten/logs/ (also mti einem Strich hintem dran)

    Danke

    mfg
     
  7. #6 z-shell, 10.06.2007
    z-shell

    z-shell Debianator

    Dabei seit:
    30.05.2007
    Beiträge:
    434
    Zustimmungen:
    0
    Ort:
    /home/z-shell
    Code:
    if [[COLOR="Red"][[/COLOR] -e '$logs' [COLOR="Red"]][/COLOR]];
     
  8. #7 Ocean-Driver, 10.06.2007
    Zuletzt bearbeitet: 10.06.2007
    Ocean-Driver

    Ocean-Driver Routinier

    Dabei seit:
    02.06.2004
    Beiträge:
    258
    Zustimmungen:
    0
    Ort:
    Germany
    Auch ohne die Extra Klammern gehts nicht.

    Geb hier mal meine Ausgabe:
    Das Logverzeichnis wurde nicht gefunden, es wird erstellt.
    mkdir: kann Verzeichnis "/Daten/logs" nicht anlegen: Die Datei existiert bereits
    Das Logverzeichnis für den heutigen Tag wird erstellt
    mkdir: kann das Verzeichnis 10.06.07 nicht anlegen: Die Datei existiert bereits


    Weißst doch dardrauf hin, das die abfrage nicht funktioniert?
     
  9. #8 z-shell, 10.06.2007
    Zuletzt bearbeitet: 10.06.2007
    z-shell

    z-shell Debianator

    Dabei seit:
    30.05.2007
    Beiträge:
    434
    Zustimmungen:
    0
    Ort:
    /home/z-shell
    Nein, sondern darauf, dass die Dateien schon existieren. ;)
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Ausserdem:
    warum willst du jeden Tag ein neues Verzeichnis erstellen? Eins reicht doch.

    Dann die Dateien da rein packen:

    Code:
    ps aux > $logs/log-$(date '+%d.%m.%y')
    Zum Bleistift
     
  10. #9 Ocean-Driver, 10.06.2007
    Zuletzt bearbeitet: 10.06.2007
    Ocean-Driver

    Ocean-Driver Routinier

    Dabei seit:
    02.06.2004
    Beiträge:
    258
    Zustimmungen:
    0
    Ort:
    Germany
    Klar,

    aber wenn $logs existiert (daher true zurückgibt)
    dann darf doch der Teil von else und fi nicht ausgeführt werden, was er aber tut ("Das Logverzeichnis wurde nicht gefunden, es wird erstellt")

    Und der Teil zwischen then und else wird nicht ausgeführt (Keine Ausgabe von "Das allgemeine Logverzeichnis wurde gefunden"

    Danke

    mfg


    Ja, ich will jeden Tag ein neues Verz. aufmachen mit dem aktuellen Datum - übersichtshalber


    Hatte nochmal ein paar Ideen:

    Code:
    #!/bin/bash
    
    #Verzeichnis wo die Logs gespeichert werden sollen
    logs=/Daten/logs
    
    if [ -e '$logs' ];
    	then 
    	echo "Das allgemeine Logverzeichnis wurde gefunden" 
    		
    
    		else
    		echo "Das Logverzeichnis wurde nicht gefunden, es wird erstellt"
    		mkdir $logs
    		fi
    
    cd $logs
    
    # Abfrage ob Verzeichnis bereits existiert oder nicht
    if [ -e '"$(date '+%d.%m.%y')"' ];
    	then 
    	echo "Verzeichnis für den heuten Tag wurde gefunden" 
    
     		else 
    		echo "Das Logverzeichnis für den heutigen Tag wird erstellt"
    		mkdir "$(date '+%d.%m.%y')"
    fi
    
    cd    "$(date '+%d.%m.%y')"
    touch "$(date '+%H:%m:%S_prozesse.log')"
    ps aux > "$(date '+%H:%m:%S_prozesse.log')"
    
    
    

    Also ich hab mal den Unterschied zwischen $logs und /Daten/logs probiert, dann ändert sich die Ausgabe - der then Anweisung sie wird nämlich aufeinamal ausgeführt.

    Mache ich da irgendwas falsch?
     
  11. #10 Schlaubi_fi.de, 11.06.2007
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Hallo,

    ohne Dein Skript jetzt überprüft zu haben, habe ich mir mal erlaubt dieses
    zu kommentieren und es so "zurechtzurücken", wie ich Skripte normalerweise
    schreibe. Schau es Dir einfach mal an:
    Code:
    #!/bin/bash
    
    logdir="/Daten/logs"                            # Logverzeichnis
    logdirday="${logdir}/$(date '+%d_%m_%y')"       # Logverzeichnis des aktuellen Tages
    logfile="${logdirday}/$(date '+%H:%m:%S_prozesse.log')"        # Logfile des aktuellen Tages
    
    if test -e "$logdir"; then                      # $logdir vorhanden?
        echo "Das allgemeine Logverzeichnis wurde gefunden";
    else
        echo "Das Logverzeichnis wurde nicht gefunden, es wird erstellt";
        mkdir "$logs";
    fi
    
    if test -e "$logdirday"; then                   # $logdirday vorhanden?
        echo "Verzeichnis für den heutigen Tag vorhanden";
    else 
        echo "Das Logverzeichnis für den heutigen Tag wird erstellt";
        mkdir "$logdirday";
    fi
    
    ps aux > $logfile                               # Prozessliste in Logfile schreiben
    
    Desweitern gib es zu sagen, dass bei Deinem $(date '+%d.%m.%y') sich die Punkte bzw. bei $(date '+%H:%m:%S_prozesse.log') die Doppelpunkte nicht so toll in Verzeichnis- oder Ordnernamen machen, wenn Du sie angelegt hast, weißt Du auch warum. Hier würde ich Dir Unterstriche, also $(date '+%d_%m_%y') vorschlagen.

    Aufgrund der Sortierung würde ich Dir auch zu einem anderen Datumsformat raten, nämlich YYYY-MM-DD.

    Die Verzeichniswechsel sind überflüssig, Du kannst auch mit absoluten Pfaden arbeiten.

    Das vorherige erstellen der Logdatei mit touch ist ebenfalls überflüssig, dieses wird durch die Ausgabeumleitung mit > ohnehin neu erstellt.

    Der Vorteil von 2 extrigen Logverzeichnissen erschließt sich mir auch nicht ganz, eher noch ein Nachteil nämlich einen weiteren Verzeichniswechsel mit cd zu verschwenden. Sowas nennt unser eins ABM :devil:
     
  12. #11 Wolfgang, 11.06.2007
    Zuletzt bearbeitet: 11.06.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Ganz kurz zu deinem Fehler:
    Das Stichwort heißt Quoting!
    Ein Beispiel:
    Code:
    A=/tmp;
    echo "$A";
    /tmp
    echo '$A';
    $A
    if [ -d "$A" ]; then echo "$A existiert";fi
    /tmp existiert
    if [ -d '$A' ]; then echo "$A existiert"; else echo "Nicht gefunden";fi
    Nicht gefunden
    
    Siehst du den Unterschied? ;)


    Gruß Wolfgang
     
  13. #12 neutrino1, 11.06.2007
    neutrino1

    neutrino1 Mitglied

    Dabei seit:
    03.05.2005
    Beiträge:
    30
    Zustimmungen:
    0
    mkdir

    Hi!

    mkdir kann doch schon, was du brauchst:
    Code:
    mkdir -p $logs
    manpage (ksh auf hp unix, wird wohl unter bash/linux nicht viel anders sein):
    Code:
    -p Intermediate directories are created as necessary.
       Otherwise, the full path prefix of dirname must
       already exist.  mkdir requires write permission in
       the parent directory.
     
  14. #13 Ocean-Driver, 11.06.2007
    Ocean-Driver

    Ocean-Driver Routinier

    Dabei seit:
    02.06.2004
    Beiträge:
    258
    Zustimmungen:
    0
    Ort:
    Germany
    Danke für eure Antworten,

    neutrino1 und Wolfgangs antworten - haben mir den "Endstoß" gegeben, es funktioniert!

    Falls es jemanden interessiert, jetzt siehts so aus:

    Code:
    #!/bin/bash
    
    # GPL Licence
    # Developed by Daniel Roß
    
    
    #Verzeichnis wo die Logs gespeichert werden sollen
    logs="/Daten/logs/Prozesse"
    
    echo "Datum: $(date '+%d.%m.%y')"
    echo "Uhrzeit: $(date '+%H:%m:%S')"
    
    if [ -e "$logs" ] # Abfrage ob das "gesamte Logverzeichnis existiert
    	then  # Ja, es ist vorhanden
    	echo "Das allgemeine Logverzeichnis wurde gefunden" 
    		
    			
    		else	# Nein, es ist nicht vorhanden
    		echo "Das Logverzeichnis wurde nicht gefunden, es wird erstellt"
    		mkdir -p $logs 
    		fi
    
    cd $logs
    
    # Abfrage ob Verzeichnis bereits existiert oder nicht
    if [ -e ""$(date '+%d_%m_%y')"" ]
    	then 
    	echo "Verzeichnis für den heuten Tag wurde gefunden" 
    
     		else 
    		echo "Das Logverzeichnis für den heutigen Tag wurde nicht gefunden, es wird erstellt"
    		mkdir "$(date '+%d_%m_%y')"
    fi
    
    cd    "$(date '+%d_%m_%y')"
    echo "Erstelle Prozessliste.."
    echo "Daten in $logs/"$(date '+%d_%m_%y')" mit dem Namen "$(date '+%H_%m_%S_prozesse.log')" gespeichert"
    ps aux > "$(date '+%H_%m_%S_prozesse.log')"
    
    heutigerLogOrdner=$logs/$(date '+%d_%m_%y')
    echo "Heute gespeicherte Logs:"
    ls $heutigerLogOrdner
    
    exit 0
    
    
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 Wolfgang, 12.06.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Zwei Dinge fallen mir auf.
    Kannst du mir sagen warum du sowas benutzt?
    Code:
    if [ -e ""$(date '+%d_%m_%y')"" ]
    
    Warum das doppelte Quoting?
    Das ist sinnfrei.
    Zweiter Punkt:
    Warum prüfst du auf existierende Datei statt auf Verzeichnis?
    Du hast zwar Erfolg damit, jedoch wenn eine Datei aber kein Verzeichnis existiert, geht es schief.

    Code:
    if [ -d "$Verzeichnis" ]
    
    Gruß Wolfgang
     
  17. #15 mic86, 12.06.2007
    Zuletzt bearbeitet: 12.06.2007
    mic86

    mic86 Jungspund

    Dabei seit:
    02.05.2007
    Beiträge:
    11
    Zustimmungen:
    0
    -e '$logs'

    Code:
    -e '$logs'
    gibt $logs und nicht den Inhalt der Variablen zurück ->
    Code:
    -e "$logs"
    würde Inhalt der Variablen zurückgeben

    (ich habe erst nach dem Einfügen dieser AW gesehen, dass das weiter oben schon erwähnt wurde)
     
Thema:

Logscript