bash script problemchen

menzm

Lt. Junior Grade
Registriert
Aug. 2005
Beiträge
303
hallo zusammen,

ich versuche mir gerade ein bash script zu basteln das mir per prowl aufs iphone eine nachricht schickt wenn iptables was in das /var/log/messages geschrieben hat. das script schaut im moment so aus:

Code:
DATE=`date '+%b %d'`
if [ -n "grep $DATE /var/log/messages" ]; then
        echo "ausgabe ist nicht leer"
else
        echo "ausgabe ist leer"
fi

jetzt habe ich das problem das immer ausgabe ist nicht leer ausgegeben wird egal ob bei dem grep eine leere ausgabe rauskommt oder nicht.
hab ich hier einen denkfehler bzw. kann mich jemand auf die richtige fährte führen :-).

viele dank

gruß
manuel
 
Zuletzt bearbeitet:
Müßtest du nicht schreiben:
Code:
if [ -n `grep $DATE /var/log/messages` ]; then
? Sonst nimmt er sich den String her, ohne das grep auszuführen...
 
jetzt bekomm ich folgenden fehler:

Code:
grep: 20: No such file or directory
./firewall.log.sh: line 3: [: too many arguments

vielen dank

gruß
manuel
 
Du musst ' nehmen statt `

also

if [ -n 'grep $DATE /var/log/messages' ]; then echo "hi"; fi
hi


Gruß
GT
 
jetzt läuft das script wieder fehlerfrei durch, allerdings bekomme ich immer ausgabe ist nicht leer obwohl die ausgabe leer ist wenn ich sie auf der command line ausführe.

viele dank für eure hilfe.

gruß
manuel
 
Hab das eben mal ausprobiert, und es müßte so funktionieren:
Code:
if [ -n `grep "$DATE" /var/log/messages` ]; then
Die Variable $DATE enthält ein Leerzeichen, wenn du da keine Anführungszeichen drum herummachst, dann wird sie als zwei getrennte Parameter interpretiert.
 
also das script funktioniert mit beiden varianten:

Code:
if [ -n `grep "$DATE" /var/log/messages |grep SRC` ]; then
if [ -n 'grep $DATE /var/log/messages |grep SRC' ]; then

allerdings bekomme ich auch bei beiden varianten immer "ausgabe ist nicht leer" obwohl bei dem grep nichts treffen sollte.

vielen dank

gruß
manuel
 
Speicher doch mal das Ergebnis des 'grep' in einer Variable zwischen und gib es auf dem Schirm aus, dann weißt du zumindest, ob dein [ -n ... ] rumzickt oder das grep doch etwas trifft.
 
script sieht jetzt so aus:
Code:
DATE=`date '+%b %d'`
OUT=`grep "$DATE" /var/log/messages`
echo = $OUT
if [ -n "$OUT" ]; then
        echo "ausgabe ist nicht leer"
else
        echo "ausgabe ist leer"
fi

jetzt funktioniert es komischerweise??

wenn das script so aussieht funktioniert es nicht:

Code:
DATE=`date '+%b %d'`
DIR=/home/manuelmenz/scripte
#OUT=`grep "$DATE" /var/log/messages`
if [ -n `grep "$DATE" /var/log/messages` ]; then
        echo "ausgabe ist nicht leer"
else
        echo "ausgabe ist leer"
fi

das verstehe ich nicht

vielen dank

gruß
manuel
 
Zuletzt bearbeitet:
Versuch mal, im zweiten Listing auch um das `grep ...` noch Anführungszeichen herum zu setzen.
 
habs versucht funktioniert nicht.

Code:
grep: 21: No such file or directory

vielen dank

gruß
manuel
 
Zurück
Oben