Expect is een tool waarmee je interactieve Linux-toepassingen zoals telnet, ssh, ftp, passwd, fsck, enzovoort kunt automatiseren, evenals interactieve terminalsessies. Hierdoor kun je allerlei taken die anders moeilijk te automatiseren zouden zijn omzetten in scripts.

Expect wordt ook vaak gebruikt in automatische testsuites om te testen of een commando zijn taak volgens de verwachtingen uitvoert. Het nadeel is wel dat Expect een uitbreiding van de scriptingtaal Tcl is en daarvan een syntax heeft geërfd die nogal ongewoon is.

Wrapper rond Expect

Expect-lite biedt hierop een antwoord: het is een wrapper rond Expect die het gebruik van deze scriptingtool gemakkelijker maakt. Je kunt een eenvoudig expect-lite script maken door gewoon commando's uit je terminalvenster te kopiëren en te plakken in een script en vooraan elke regel een > of < teken toe te voegen om de actie aan te duiden die expect-lite moet uitvoeren.

Met het eerste teken stuur je de erachter komende tekenreeks naar de host, en met het tweede teken wacht je tot de uitvoer overeenkomt met de tekenreeks of reguliere expressie op de regel. Een voorbeeld:

$interface=eth1

$ip_addr=192\.168\.1\.2

>ifconfig $interface $ip_addr

>ifconfig $interface

<$ip_addr

In de eerste twee regels definiëren we de variabelen interface die de naam van een Ethernet-interface bevat en ip_addr die het IP-adres bevat dat we op die interface willen instellen. Daarna geven we een ifconfig-commando door aan de computer om het IP-adres in te stellen op die interface, en nog eens een ifconfig-commando, maar dan enkel met de interface als parameter zodat we alle informatie hierover te zien krijgt. Met <$ip_addr verwachten we nu dat het ingestelde IP-adres in de uitvoer te zien is.

Voer nu het script als volgt uit:

$ expect-lite cmd_file=set_ip_addr.elt

De commando's in het script worden nu uitgevoerd en als het ingestelde IP-adres in de uitvoer van ifconfig te zien is, krijgt u de boodschap "##Overall Result: PASS" te zien. Expect-lite kent nog andere mogelijke parameters, bijvoorbeeld remote_host, user_name en user_password. Hiermee voer je het script op een andere computer dan de lokale computer uit. Inloggen kan via ssh (of het niet aan te raden telnet), met een wachtwoord of een sleutelpaar. In het laatste geval moet je uiteraard op voorhand de sleutels correct opgezet hebben op de computers waarop je expect-lite wil uitvoeren.

Uiteraard is dit slechts een eenvoudig voorbeeld. Expect-lite kent ook variabelen, constanten, conditionals, lussen, en allerlei geavanceerde mogelijkheden. Bovendien kun je ook Expect-code in een expect-lite script inbedden. Voor meer informatie over de mogelijkheden verwijzen we je naar de uitgebreide documentatie.