Senden/Erwarten Skripte in Shell Skript

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
kleinerspast
Beiträge: 276
Registriert: 29.08.2007 22:53:28

Senden/Erwarten Skripte in Shell Skript

Beitrag von kleinerspast » 25.07.2009 17:54:01

Hi,

ich will ein Skript schreiben, was automatisch meine fritz box neustartet. Durch google habe ich erfahren, das man dies wohl mit den "Expect/Send" Methoden macht.

Hier mein kleiner natürlich nicht funktionierender Ansatz:

Code: Alles auswählen

#!/usr/bin/expect --

send "Connecting...\n"
spawn "telnet"
send "open 192.168.x.y\r"

expect "PS>"
send "passwort\r"

hier die fehlermeldung:
expect-test.sh: line 3: send: command not found
expect-test.sh: line 4: spawn: command not found
expect-test.sh: line 5: send: command not found
couldn't read file "PS>": no such file or directory
expect-test.sh: line 8: send: command not found
Ich denke mein erstes Problem ist, das ich nicht über diese Expect Sache weis. Gibt es im Netz irgendwo eine ausführliche evtl sogar deutsche^^ Erklärung dafür?

Falls jemand direkt sieht wo der Fehler ist, wäre nat auch top wenn ihrs sagen könntet. Aber generell würde ich mir trotzdem mal gerne ein Tutorial dazu durchlesen.

Gruss

Benutzeravatar
format_c
Beiträge: 188
Registriert: 23.01.2008 14:24:17
Kontaktdaten:

Re: Senden/Erwarten Skripte in Shell Skript

Beitrag von format_c » 25.07.2009 18:41:19

Hi,

also ich selbst hab mit expect auch noch nicht viel gemacht.
Allerdings funktioniert dein Testskript bei mir wunderbar:

Code: Alles auswählen

koeppea@h1350189:~$ cat > test.exp
#!/usr/bin/expect --

send "Connecting...\n"
spawn "telnet"
send "open 192.168.x.y\r"

expect "PS>"
send "passwort\r"
koeppea@h1350189:~$ chmod +x test.exp 
koeppea@h1350189:~$ 
koeppea@h1350189:~$ 
koeppea@h1350189:~$ ./test.exp 
Connecting...
spawn telnet
open 192.168.x.y
telnet> telnet: could not resolve 192.168.x.y/telnet: Name or service not known
telnet> 
unter /usr/share/doc/expect gibt es die Datei FAQ.gz die einiges an Dokumentation bereit haelt und auch auf Doku im Netz verweist.

Aber nochmal zu deinem Problem:
Verwende vielleicht lieber "#!/usr/bin/env expect" als Shebang.
Außerdem solltest du sicherstellen, dass der Interpreter auch gefunden werden kann:

Code: Alles auswählen

koeppea@h1350189:~$ which expect
/usr/bin/expect

Gruß Alex

kleinerspast
Beiträge: 276
Registriert: 29.08.2007 22:53:28

Re: Senden/Erwarten Skripte in Shell Skript

Beitrag von kleinerspast » 25.07.2009 19:58:36

Hallöle,

wie hast du das skript denn gestartet? also ich habe diesen code in eine .sh getan! Dann starte ich mit sh skriptname.sh das skript. das geht dann bei mir nicht... Aber du legst ja anscheinend schon als .exp an, das ist ja schonmal der erste fehler?^^

muss ich evtl noch ein Programm installiern?

Benutzeravatar
format_c
Beiträge: 188
Registriert: 23.01.2008 14:24:17
Kontaktdaten:

Re: Senden/Erwarten Skripte in Shell Skript

Beitrag von format_c » 25.07.2009 23:41:11

Da ist ja bereits das Problem.
Wie ich das Skript gestartet habe steht in dem Listing:
1. Datei muss ausfuerhbar sein
2. Datei ausfuehren mit ./skript (wenn sich skript im selben Verzeichnis befinden)

Die Dateiendung hat mit dem Dateiinhalt oder -typ nichts zu tun. Die von mir gewaehlte Endung
ist willkuerlich.
Die erste Zeile (die mit dem #!) sagt dem Kernel welchen Interpreter er fuer diese Datei nehmen muss.
Du hingegen verwendest explizit den Interpreter "sh" der eigentlich eher fuer Shell-Kommandos gedacht ist und die Befehle von expect natuerlich nur bedingt (wenn ueberhaupt) kennt.

D.H. mach die Datei ausfuerhbar und starte die Datei dann direkt ohne Angabe eines Interpreters:

Code: Alles auswählen

$ chmod +x datei
$ ./datei
Dann sollte es funktionieren.

Gruß Alex

Benutzeravatar
CrashMan
Beiträge: 340
Registriert: 07.04.2007 14:04:27
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: MD

Re: Senden/Erwarten Skripte in Shell Skript

Beitrag von CrashMan » 26.07.2009 08:27:02

Zum Reconnecten gibts hier ein Fritzbox-Wiki mit noch mehr Varianten.
Einfach curl installieren, UPnP aktivieren und die curl-zeile nutzen, so hats bei mir funktioniert.
Ansonsten gibts dort auch ein expect-Script, wie du es planst.

mfg
debian stable + arch

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: Senden/Erwarten Skripte in Shell Skript

Beitrag von habakug » 26.07.2009 10:37:57

Hallo!

Du musst telnet auf der Box aktivieren indem du sie "anrufst":

Code: Alles auswählen

#96*7* Telnet ein
#96*8* Telnet aus
Gruß, habakug
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Re: Senden/Erwarten Skripte in Shell Skript

Beitrag von nepos » 26.07.2009 10:43:27

kleinerspast hat geschrieben:Hallöle,

wie hast du das skript denn gestartet? also ich habe diesen code in eine .sh getan! Dann starte ich mit sh skriptname.sh das skript. das geht dann bei mir nicht... Aber du legst ja anscheinend schon als .exp an, das ist ja schonmal der erste fehler?^^

muss ich evtl noch ein Programm installiern?
Ob dein Skript nun .exp, .sh, .pl oder .foo heisst ist total egal. Fuer die Shell ist nur die erste Zeile interessant.
Und da sagst du ja explizit, dass das Skript mit expect als Interpreter laufen soll.

kleinerspast
Beiträge: 276
Registriert: 29.08.2007 22:53:28

Re: Senden/Erwarten Skripte in Shell Skript

Beitrag von kleinerspast » 26.07.2009 15:38:36

Moin Leude,

also Telnet habe ich zu aller erst auf der box aktiviert. Das ist logisch. Mein skript ist im Moment so weit, das es sich in die Box einwählen kann allerdings dann noch kein Kommando ausführen kann. Weiß noch net woran das liegt, aber ich schaue mir jetzh mal den Link an^^

Antworten