telnet via shell script steuern

H

HiQ

Aktives Mitglied
Thread Starter
Dabei seit
23.01.2008
Beiträge
240
Reaktionspunkte
4
Hi,
ich habe hier folgendes Probelm.

Ich möchte gerne ein Shellscript schreiben das mir ausgibt ob ich eine neue Mail habe oder nicht. Dazu habe ich vor via telnet auf mein Postfach zuzugreifen. Soweit so gut.

Mein Problem ist nun, dass ich in meinem Script an einer Stelle nicht weiter komme. Ich hab da die Zeile:
Code:
telnet pop.gmx.net 110

Dann öffnet sich natürlich auch die Verbindung und man muss seinen Benutzernamen und Passwort eingeben. Dies macht man dann so:

Code:
USER benutzer@gmx.de
PASS passwort

Jetzt befindet man sich ja nicht mehr in der Shell wenn telnet läuft. Also kann ich ja auch nicht diese Befehle einfach in mein Shellscript schreiben. Ganz zu schweigen vom letzten Befehl NEW der dann als Ausgabe die Anzahl der neuen Mails hat (diese Ausgabe will ich natürlich auch am besten in einer Variable speichern).

Also mein Frage: Wie kann ich in meinem Shellscript das telnet-Programm steuern und auch noch eine Ausgabe dieses Programms speichern?

Vielen Dank schonmal vorab.

Herzlichen Gruß,
HiQ

PS: Ich bin übrigens anderen Lösungen (ohne telnet oder mit einem andern Script zB Pearl) nicht abgeneigt. Ziel ist es mit einem Script die Anzahl der neuen Mails in meinem Postfach auszulesen.
 
Ich habe gerade noch was mit expect gelesen ich glaube damit müsste es auch gehen.

Sinn und zweck dieses Script soll es sein die Maillampe an einem anderen Laptop (Ubuntu) anzustellen wenn eine neue Mail im Postfach ist.
 
für ubuntu gibt es bestimmt etliche pop checker im repository...
 
telnet ist interaktiv, scheidet für Dein Anliegen schon mal aus.
excpect würde gehen, ist aber ein wenig, nun ja, rudimetär.

Mit Perl kann man sehr gut mit Servern kommunizieren. Da gibt es viele sehr gute Module dafür. Welches da am besten geeignet ist, kann ich nicht sagen, weil ich nicht genau verstanden habe, was Du genau machen möchtest.
 
er will halt so was wie biff/xbiff haben.
 
Okay Mädels, telnet scheidet wirklich aus. Selbst mit expect fehlt mir die Möglichkeit die Ausgabe eines Befehls zu speichern, zumindest komme ich einfach nicht drauf wie ich das mit expect mache.

Habe mir jetzt ein paar andere Scripte angesehen und selbst dann folgendes entworfen (zur Info für die, die das gleich Problem haben und tatsächlich mal die Suche benutzen ;) ).

Nochmal zur Situation: Bei dem Asus Laptop (G1 oder sowas unvernünftiges) von meinem Bruder ist vorne an der Front eine LED die Leuchten soll wenn eine neue Mail vorhanden ist.

Er hat auf seinem Laptop Ubuntu laufen.

Um diese LED überhautp zum leuchten zu bringen, muss man eine 1 in folgenden Datei schreieben: /sys/class/leds/asus\:\:mail/brightness

Das kann man dann im Terminal mit folgendem Befehl leicht erledigen:
Code:
echo 1 > /sys/class/leds/asus\:\:mail/brightness

Tipp: Anstatt von mail kann man auch gaming (Lampen am Monitor rand) oder touchpad (Lampe am touchpad) die anderen LEDs an bzw ausschalten.

Damit man dies wiederum tun kann muss man natürlich schreibrechte für diese Datei haben. Bei jedem Systemstart werden diese aber leider immer wieder zurückgesetzt. Also muss man nun in die Datei /etc/rc.local folgende Zeile einfügen.
Code:
chmod 666 /sys/class/leds/asus\:\:mail/brightness
Alle Befehle in dieser Datei werden übrigens bei Systemstart mit Adminrechten ausgeführt.

Nun erstellt man sich noch ein Shellscript mit folgendem Inhalt welches man mithilfe eines Cronjobs ausführen lässt und siehe da ... die Lampe geht an wenn neue Mails da sind und wenn sie bis zum nächstenmal aufrufen des Scripts abgerufen wurden, geht die Lampe auch wieder aus.

Code:
#!/bin/bash
username=<mailaddy>@gmx.de
passwd=<passwort>
host=pop.gmx.net
port=110

## Verbindung zum Postfach aufbauen und 
## Anzahl der Mails auslesen.

exec 3<>/dev/tcp/$host/$port
read ok line <&3
echo user $username >&3
read ok line <&3
echo pass $passwd >&3
read ok line <&3
echo stat >&3
read ok num x <&3
echo quit >&3

## Testen ob Mails da sind oder nicht.
## Entsprechenden Wert in Variable anaus speichern.

if [[ $num == 0 ]]; then
	anaus=0
fi

if [[ $num > 0 ]]; then
	anaus=1
fi
## Ändern der Datei im LED anzustellen.

echo $anaus > /sys/class/leds/asus\:\:mail/brightness

exit 0

Falls jemand noch eine tolle Idee hat wie man das Script verbessern kann bitte ich um Meldung :)

Achso wie ihr seht habe ich da 2 If-Abfragen, ich habe es einfach nicht hinbekommen eine if ... then ... else Anweisung im bash-Script zu schreiben. Wenn mir das noch jemand verraten könnte.

Herzlichen Gruß,
HiQ
 
Code:
if [[ $num == 0 ]]; then
	anaus=0
else
	anaus=1
fi

Idee: Den Betreff der Mail via LED morsen. :D
 
Du wirst lachen aber auf dem Asus Laptop gibt es wirklich noch so ein kleines Dotmatrixdisplay da könnte man den Betreff wirklich ausgeben lassen. Nur wie man das anspricht weiß ich leider noch nicht.

Ich weiß nicht was ich falsch mache aber mit dem else läuft das bei mir nicht ... seltsam.
 
Was passiert?

Mach vielleicht mal
$num -eq 0
statt
$num == 0
 
ja, und statt '>' muss es heißen '-gt'.
'==' und '>' sind String Vergleiche und da müssen natürlich auch ggf. Strings miteinander verglichen werden.
 
Zurück
Oben Unten