Problem mit Bash Script

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von krustykiller, 09.11.2006.

  1. #1 krustykiller, 09.11.2006
    Zuletzt bearbeitet: 09.11.2006
    krustykiller

    krustykiller Pistensau

    Dabei seit:
    20.01.2006
    Beiträge:
    7
    Zustimmungen:
    0
    Ort:
    Deutschland/Eifel
    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ß
     
  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 Xanti, 09.11.2006
    Zuletzt bearbeitet: 09.11.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    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)
     
  4. #3 Wolfgang, 09.11.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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. ;)
     
  5. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    ot: Ich muss über 300 Beiträge einholen. ;)
     
  6. #5 krustykiller, 09.11.2006
    krustykiller

    krustykiller Pistensau

    Dabei seit:
    20.01.2006
    Beiträge:
    7
    Zustimmungen:
    0
    Ort:
    Deutschland/Eifel
    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ß
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 krustykiller, 09.11.2006
    krustykiller

    krustykiller Pistensau

    Dabei seit:
    20.01.2006
    Beiträge:
    7
    Zustimmungen:
    0
    Ort:
    Deutschland/Eifel
    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:
     
  9. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    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
     
Thema:

Problem mit Bash Script

Die Seite wird geladen...

Problem mit Bash Script - Ähnliche Themen

  1. bash esac problem

    bash esac problem: Hey, ich weiß nicht wie ich das problem hier lösen kann: #!/bin/bash func() { echo 'hello world' } select abm in 'Print hello...
  2. Sortierungsproblem Bash

    Sortierungsproblem Bash: Moin, ich hab ein kleines Problem mit ner output Sortierung von nem Bashscript. Folgendes Script: makemenuetop() { PWD=($1) #makemenue $1...
  3. Problem mit Rekursion in Bash / Funktioniert das überhaupt?

    Problem mit Rekursion in Bash / Funktioniert das überhaupt?: Hallo Allerseits, ich versuche gerade ein kleines Shell skript zu schreiben, welches bei einem gegebenen Verzeichnis alle darunter liegenden...
  4. Bash - Problem mit verschachtelten Schleifen

    Bash - Problem mit verschachtelten Schleifen: Hallo, ich habe bei einem Skript ein Problem mit einer If-Schleife in einer While-Schleife, das Skript soll auf mehreren Servern SQL-Befehle...
  5. Bash Verständnissproblem

    Bash Verständnissproblem: Hallo, ich habe mir vor einigen Monaten folgende Notiz zum Test einer Null-Modem-Verbindung 2er Computer via Bash gemacht: Serial Port Null...