Logscript

Ocean-Driver

Ocean-Driver

Routinier
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´
 
Zuletzt bearbeitet:
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
 
Zuletzt bearbeitet:
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"
 
Zuletzt bearbeitet:
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
 
Code:
if [[COLOR="Red"][[/COLOR] -e '$logs' [COLOR="Red"]][/COLOR]];
 
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?
 
Zuletzt bearbeitet:
Weißst doch dardrauf hin, das die abfrage nicht funktioniert?
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
 
Zuletzt bearbeitet:
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?
 
Zuletzt bearbeitet:
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:
 
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
 
Zuletzt bearbeitet:
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.
 
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
 
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
 
-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)
 
Zuletzt bearbeitet:
gekürzter Code ;-)

Ich hab mich wohl nicht klar genug ausgedrückt. mkdir -p legt dir alle notwendigen Verzeichnisse an, so sie nicht vorhanden sind, die if-Anweisung brauchst du nicht.

Du kannst dir also beide ifs sparen und stattdessen unteres scripten:
Code:
mkdir -p ${logs}/$(date +%d_%m_%y)
cd ${logs}/$(date +%d_%m_%y)
 
Hi,

Klar einiges ist "übertrieben" aber ich benutzte die ganze Sache z.Z. um mich in die Bash-Programmierung einzuarbeiten - das es einfach geht glaub ich dir, aber hier hätte ich z.B. leicht für mich die Möglichkeit zu überprüfen ob heute schon geloggt wurde.. und ob das allgemeine Log-verz. existiert
 
Du kannst dir also beide ifs sparen und stattdessen unteres scripten:
Code:
mkdir -p ${logs}/$(date +%d_%m_%y)
cd ${logs}/$(date +%d_%m_%y)
also wenn man mit absoluten Pfaden arbeitet (bei der Ausgabeumleitung),
dann würde ich Dir sogar noch den Verzeichniswechsel unterm Hintern wegrationalisieren :D :D
 

Ähnliche Themen

Returncode ($?) bei find immer "0" ?

Switche abfragen über Script

NAS-Drive Mount in Bash-Script über crontab

Verschlüsseltes Backup-Script mit rsync

Keine grafische Oberfläche (Debian Installation)

Zurück
Oben