Problem mit Bash Script

krustykiller

krustykiller

Pistensau
Hallo zusammen,

habe ein kleines Problem mit meinem Bash Script.

Das Script soll dazu dienen die Anzahl der Einträge aus der Logdatei /var/log/messages von dem aktuellen Tag zählen. Dazu habe ich mir folgendes Überlegt.

Code:
#!/bin/bash

DAY=`/bin/date +%e`
MONTH=`/bin/date +%b`
PATH="/var/log/messages"

if [ $DAY == "1" ] || [ $DAY == "2" ] || [ $DAY == "3" ] || [ $DAY == "4" ] || [ $DAY == "5" ] || [ $DAY == "6" ] || [ $DAY == "7" ] || [ $DAY == "8" ] || [ $DAY == "9" ]; then
   $DAY=" $DAY"
fi

ERG=`/bin/cat $PATH | /bin/grep tftp | /bin/grep \"$MONTH$DAY\" | /usr/bin/wc -l`
echo "Heute wurden $ERG Dateien heruntergeladen"

exit 0

Problem ist, das mein zweites grep die doppelten Anführungszeichen benötigt um nach dem Datum zu filtern. Jedoch habe ich es noch nicht rausfinden können, wie ich diese in dem Script einbauen kann. Auf der Konsole funktioniert der Befehl einwandfrei. Könnt ihr mir nen Tipp geben, wie ich das Prob lösen kann? :hilfe2:

Vielleicht könnt ihr mir auch noch eine schönere Lösung für mein IF geben. Sieht nicht wirklich gut aus, funktioniert aber. :))

Gruß
 
Zuletzt bearbeitet:
Deine if-Konstrukt kannst Du Dir durch

Code:
DAY=$(printf "%2i" $(/bin/date +%e))

ersparen. Desweiteren ist in Deinem Skript ein "useless use of cat". Auch die Backticks sind nicht mehr zeitgemäss, besser ist $(...)

Code:
Erg=$(/bin/grep tftp $PATH | /bin/grep "$MONTH$DAY" | /usr/bin/wc -l)

Probier mal, ob das Skript so läuft.

Gruss, Xanti

edit: Das "wc -l" kannst Du Dir dank grep auch sparen:

Code:
Erg=$(/bin/grep tftp $PATH | /bin/grep "$MONTH$DAY" -c)
 
Zuletzt bearbeitet:
Hallo
Nur kurz dazu:
1. Tipp:
Warum vergleichst du nicht gleich auf kleiner Monatstag ?
2. Tipp:
Verwende $(command) statt der Backticks, das ist besser lesbar.
3. Tipp:
Verwende bei grep immer Quotas, sonst bekommst du mitunter nicht das was du willst. Egrep kennt auch Zeichenklassen ["]

Gruß Wolfgang
PS wiedermal zu langsam. ;)
 
Code:
DAY=$(printf "%2i" $(/bin/date +%e))

Code:
Erg=$(/bin/grep tftp $PATH | /bin/grep "$MONTH$DAY" -c)

Super hat wunderbar geklappt. 1000 Dank, bin anscheinend nicht mehr auf dem neuesten Stand in Sachen Bash Scripting. Ist seit langem nochmal das erste Script das ich geschrieben habe.

Gruß
 
Habe noch eine kleines Problem. Könnt mir bestimmt schnell helfen.

Versuche mit Regular Expressions eine IF Anweisung zu schreiben.

Ich will prüfen wenn die Variabel $i das Wort "test" enthält, soll was passieren.

Leider bin ich in Sachen Regular Expression nicht der Held. Könnt ihr mir nochmal helfen? :brav:
 
Naja, dafür benötigt man keine reg. Ausdrücke.

Code:
if (echo $i | fgrep -q "test"); then echo hallo; fi

Noch ein Tipp, wenn man nur nach festen Strings grept, dann ist fgrep schneller.

Gruss, Xanti
 

Ähnliche Themen

Verschlüsseltes Backup-Script mit rsync

Crontab und Scripts - Problem

Problem bei der Vergabe von Sciherheitsinformationen auf eine Freiagbe

Timeout für Long Time Querys

Queue für copy Script

Zurück
Oben