Archiv verlassen und diese Seite im Standarddesign anzeigen : shell script hilfe
Hallo,
leider habe ich keine ahnugn von shell scripten, also ich bin ganz neu in diesem breich :)
ich muss ein script erstell das das macht:
2 text daten vergleicht ob die emails in beiden vorkommen, dann 2 dateien erstellt, einmal eine datei mit den emails die vorkommen, und eine datei die die emails aufzeigt die nicht in beiden datei vorkommen.
bitte helft mir
MFG
bitte helft mir
stichpunkte bzw. befehle fuer dein script:
diff
grep
if
touch
http://www.tldp.org/LDP/abs/html/
stichpunkte bzw. befehle fuer dein script:
diff
grep
if
touch
leider kann ich damit garnix anfangen, evt eine kurze erklärung?
leider kann ich damit garnix anfangen, evt eine kurze erklärung?
frage deine suchmaschine - oder man "befehl"
sorry - oder soll ich das script fuer dich schreiben?
frage deine suchmaschine - oder man "befehl"
sorry - oder soll ich das script fuer dich schreiben?
wenn du so nett bist und es für mich schreiben würdest, dann könnte ich mich auch einlesen damit ich dei struktur usw auch verstehe
2 text daten vergleicht ob die emails in beiden vorkommen
Versteht ich nicht. Enthalten die Dateien jeweils eine Liste von E-Mail-Adressen (eine pro Zeile?) oder wirklich mehrere ganze E-Mails mit Header und allem untereinander?
also, eine datei enthält nur emails, eine pro zeile
die andere datei enthält die anfragen der server, wo in der zeile eine email steht aber halt irgentwo in der zeile
Ich gehe jetzt mal davon aus du meinst E-Mail-Adressen.
cat adressen.txt | while read addr ; do grep -q -o $addr server.log && echo $addr >> drin.txt || echo $addr >> nicht_drin.txt ; done
also mein script sieht so aus, wenn ich es ausführe, passiert nix
#!/bin/bash
#Programm testscript.sh
cat emails.txt | while read addr ; do grep -q -o $addr mail.log.4 && echo $addr >> drin.txt || echo $addr >> nicht_drin.txt ; done
Und die Dateien drin.txt und nicht_drin.txt sind leer?
ja die sind komplett leer
Tja, dann müsstest du die beiden Dateien emails.txt und mail.log.4 hier mal auszugsweise posten. Adressen und dergleichen kannst du ja abändern.
die beiden daten sind beide ca 25mb groß ich poste mal einen kleinen teil davon:
Emails:
xxx@xxx.de
xx12@xx234.de
usw...
und der log:
Jan 20 06:35:27 ro11638 couriertcpd: Connection, ip=[::ffff:xx.xx.xx.xx]
Jan 20 06:35:27 ro11638 couriertcpd: LOGIN, user=petra.mail@ityx.de, ip=[::ffff:xx.xx.xxx.xxx], protocol=IMAP
Jan 20 06:35:28 ro11638 couriertcpd: Connection, ip=[::ffff:xx.xx.xx.xx]
Jan 20 06:35:28 ro11638 couriertcpd: LOGIN FAILED, user=test@ityx.de, ip=[::ffff:xx.xx.xxx.xxx]
Jan 20 06:35:33 ro11638 couriertcpd: LOGOUT, ip=[::ffff:xx.xx.xxx.xxx], rcvd=70, sent=458
Jan 20 06:35:33 ro11638 couriertcpd: LOGOUT, user=test@ityx.de, ip=[::ffff:xx.xx.xxx.xxx], headers=0, body=0, rcvd=85, sent=693, time=6, starttls=1
Jan 20 06:35:44 ro11638 postfix/smtpd[14171]: warning: xx.xxx.xx.x: address not listed for hostname localhost
Jan 20 06:35:44 ro11638 postfix/smtpd[14171]: connect from unknown[xx.xx.xxx.xxx]
Jan 20 06:35:46 ro11638 postfix/smtpd[14171]: NOQUEUE: reject: RCPT from unknown[xx.xx.xxx.xxx]: 554 5.7.1 <localhost>: Helo command rejected: youre not me; from=<error@mailfrom.com> to=<test@ityx.de> proto=ESMTP helo=<localhost>
Jan 20 06:35:46 ro11638 postfix/smtpd[14171]: NOQUEUE: reject: RCPT from unknown[xx.xx.xxx.xxx]: 554 5.7.1 <localhost>: Helo command rejected: youre not me; from=<error@mailfrom.com> to=<test@ityx.de> proto=ESMTP helo=<localhost>
Jan 20 06:35:46 ro11638 postfix/smtpd[14171]: NOQUEUE: reject: RCPT from unknown[xx.xx.xxx.xxx]: 554 5.7.1 <localhost>: Helo command rejected: youre not me; from=<error@mailfrom.com> to=<test@ityx.de> proto=ESMTP helo=<localhost>
Jan 20 06:35:46 ro11638 postfix/smtpd[14171]: NOQUEUE: reject: RCPT from unknown[xx.xx.xxx.xxx]: 554 5.7.1 <localhost>: Helo command rejected: youre not me; from=<error@mailfrom.com> to=<test@ityx.de> proto=ESMTP helo=<localhost>
Jan 20 06:35:46 ro11638 postfix/smtpd[14171]: NOQUEUE: reject: RCPT from unknown[xx.xx.xxx.xxx]: 554 5.7.1 <localhost>: Helo command rejected: youre not me; from=<error@mailfrom.com> to=<test@ityx.de> proto=ESMTP helo=<local
das komische ist, das er wenn ich das script ausführe überhauptnichts macht der rechner also keine aktivitäten
ich will halt das das script in emails.txt schaut welche emails drin sind, und dann die emails alle mit der mails.log.4 datei vergleicht ob die aderdde irgentwie in der mail.log.4 vorkommt, falls ja dann in drin.txt postet falls nicht in nicht_drin.txt postet
Also bei mir funktioniert das so, beide Adressen aus emails.txt landen in nicht_drin.txt.
mhh, kannst du mir mal dein script schicken also hier posten? danke
habe das scirpt und alle daten in einem ordner
wenn ich das scirpt ausführe passiert nichts, ich führe es so aus:
./testscript.sh
Ich habe dein Script ausgeführt. Muss jetzt weg.
mhh komisch das es bei mir nicht funktioniert
er schjreibt rein garnichts rein
weiß keiner wieso das script so nicht funktioniert?
ok, es währe eig auch möglich, alle email acressen aus der log datei auszulesen, dann könnte man beide datein ebsser vergleichen
#!/bin/bash
cat /daten/emails.txt | while
read line
do
echo "Ausgabe: $line" >> Emails_Auslesen.txt
done
damit speichert der schonmal zele für zeile die die emails,
kann ich nicht den log genauso auslesen, ABER mit grep ALLE email adressen greppen?
grep -o -E "[A-Za-z0-9_\-\+\.]+@[A-Za-z0-9_\-\+\.]+" mail.log.4 | sort| uniq
wobei ich wahrscheinlich nicht alle in E-Mail-Adressen erlaubte Zeichen berücksichtigt habe. Eine passende Regular Expression lässt sich aber gewiss auch per Internet-Suchmaschine finden.
Dodobo.reloaded
28.01.11, 16:27
Also ich danke euch auch mal für die beiden Beispiele, da ich recht wenig code und so wieder ein paar Beispiele kennengelernt habe, die ich auch nach 2-3 mal lesen + "man" verstehe. Wen es auch interessiert, der sollte sich mehr auf Seiten mit solchen Schnippseln rumtreiben, etwa http://www.commandlinefu.com. Tab seit Wochen zum Ansehen offen.
Bitte baue Testausgaben in Dein Script ein, z.B. so eine Zeile am Anfang "echo START;" und so eine am Ende "echo ENDE$?;". Zumindest diese müsstest Du dann beim ausführen des Scriptes sehen. Wenn nicht, gibt es ein grundlegendes Problem.
Du kannst übrigens fast alles nötige in den man-Pages nachlesen, z.B. mit dem Befehl "man bash" findest Du alles, was die bash-Shell so kann. Mit "man diff" alles, was diff so kann usw..
Was allerdings nicht dort steht, sind folgende Grundlagen:
Damit ein Shell-Script ohne Angabe des Interpreters startet (so wäre es z.B. mit Interpreter "bash meinscript"), muss man:
1. In der ersten Zeile den Interpreter etwa so angeben "#! /bin/bash"
2. Das Script muss die Rechte zum Ausführen gesetzt haben, z.B. mit "chmod ug+rx meinscript", siehe "man chmod"
3. Optional kann man das Script nach /usr/local/bin/ tun und (falls noch nicht geschehen) dieses Verzeichnis über die Startdateien seiner Shell in die PATH-Variable tun. Dann kann man es nämlich ausführen, ohne einen Pfad dazu anzugeben (z.B. "./meinscript" oder "/home/james/meinscript").
Dodobo.reloaded
29.01.11, 09:43
Man kann auch ein Verzeichnis bin im eigenen Home anlegen. Dürfte sogar schon im Path drin sein, wenn man Glück hat.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.