Technologieaustausch

Shell Expect automatisierte Interaktion (Beispiel)

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Shell Erwarten Sie eine automatisierte Interaktion

Während des täglichen Linux-Betriebs und der Wartung ist es häufig erforderlich, sich aus der Ferne beim Server anzumelden. Während des Anmeldevorgangs ist ein interaktiver Vorgang erforderlich, und Sie müssen möglicherweise Ja/Nein und andere Informationen eingeben, sodass erwartet wird, um eine Interaktion zu erreichen .

Schlüsselsyntax

❶[#!/usr/bin/expect]

Diese Zeile teilt dem Betriebssystem mit, welche Shell zum Ausführen des Codes im Skript verwendet werden soll. Erwartet wird hier eigentlich das Gleiche wie bash unter Linux und cmd unter Windows. HINWEIS: Diese Zeile muss die erste Zeile im Skript sein.

❷einstellen

Das Standard-Timeout von Expect beträgt 10 Sekunden. Das Sitzungs-Timeout kann über den Set-Befehl festgelegt werden. Wenn das Timeout nicht begrenzt ist, sollte es auf -1 gesetzt werden.

Beispiel: set timeout 300 // Zeigt an, dass das Sitzungszeitlimit 300 Sekunden beträgt

Beispiel: set timeout -1/setting/never timeout, allgemeine Einstellungen

Hinweis: Warum müssen Sie ein Zeitlimit festlegen? Da die Standardzeit 10 Sekunden beträgt, wird die Verbindung während der interaktiven Ausführung wahrscheinlich getrennt, was dazu führt, dass die Aufgabenausführung vor dem Abschluss abgebrochen wird. Eine geplante Aufgabe unseres Unternehmens, die Dateien von einem Remote-FTP synchronisierte, wurde immer beendet. Später habe ich das Timeout auf -1 gesetzt und es war in Ordnung.

❸Laichen

Auf spawn folgt normalerweise ein Linux-Ausführungsbefehl, was bedeutet, dass eine Sitzung geöffnet, der Prozess gestartet und nachfolgende Interaktionsinformationen verfolgt werden.

❹erwarten

Nur die Ausführungsergebnisse der von Spawn ausgeführten Befehle werden von Expect erfasst. Dazu gehören hauptsächlich Standardeingabeaufforderungsinformationen, EOF und Timeout. Warten Sie, bis die Eingabeaufforderung angezeigt wird. Dies ist die Eingabeaufforderung zum Erfassen von Benutzereingaben:

➎senden

Das Senden von Werten, die eine Interaktion erfordern, ersetzt die manuelle Eingabe des Benutzers. Dieser Befehl kann nicht automatisch eingegeben oder in die Zeile verschoben werden und erfordert im Allgemeinen das Hinzufügen von r (Wagenrücklauf) oder n

erwarten Sie „password“{ send „abc123r“} //Der Sendeteil derselben Zeile muss {} haben

❻Terminator erwartet eof/interact

Erwarte EOF

Dies muss entsprechend spawn hinzugefügt werden, was bedeutet, dass die Ausgabeinformationen des Capture-Terminals beendet werden, ähnlich wie if...endif

interagieren

Behalten Sie nach Abschluss der Ausführung den interaktiven Status bei und übertragen Sie die Steuerung an die Konsole. Zu diesem Zeitpunkt kann der manuelle Vorgang ausgeführt werden. Wenn kein solcher Satz vorhanden ist, wird er nach Abschluss der Anmeldung beendet, anstatt auf dem Remote-Terminal zu bleiben.

PS: Das Expect-Skript muss mit „interact“ oder „expect eof“ enden, um automatisierte Aufgaben auszuführen.

Beispiel

Fügen Sie den Expect-Befehl in das Shell-Skript ein. Das Format ist wie folgt

Beispiel 1: 22.sh-Skript zum Erstellen eines Ordners

#!/bin/sh

erwarten

SSH-Version 10.1.1.196 erstellen

erwarte Passwort {send xxxn}

sende cd /home/cg/hmf_app/testr

sende mkdir newworkr

sende exitr

Erwarte EOF

Ende der Laufzeit

Beispiel 2: Ordner-Shell-Skript erstellen

erwarten

SSH-Version 10.1.1.196 erstellen

erwarte Passwort {send xxxn}

sende cd /home/cg/hmf_app/testr

sende mkdir newworkr

sende exitr

Erwarte EOF

Ende der Laufzeit

Beispiel 3: Dateien kopieren

erwarten

setze Timeout -1

spawn scp [email protected]:/data/package/casb/$casbzip ./

erwarte Passwort {send xxxn}

Erwarte EOF

Ende der Laufzeit

Anmerkung:

Ende der Laufzeit

...

Ende der Laufzeit

Stellt ein Shell-Skript dar

beziehen auf:Shell erwartet automatisierte Interaktion_Shell-Skript, interaktive automatische Eingabe von Inhalten – CSDN-Blog