Erstellen praktischer expect-Skripte für gängige Aufgaben
In diesem Schritt erstellen wir praktische expect
-Skripte für gängige Aufgaben, die Systemadministratoren oft automatisieren müssen. Wir konzentrieren uns auf Dateioperationen, Benutzerinteraktionen und Systemüberwachung.
Automatisierung der Dateiübertragung mit expect
Lassen Sie uns ein expect
-Skript erstellen, das die Übertragung einer Datei mit dem Befehl scp
automatisiert. Da wir in dieser Umgebung keine tatsächliche Dateiübertragung durchführen können, simulieren wir sie:
cd ~/project
nano file_transfer.sh
Geben Sie den folgenden Inhalt ein, um eine SCP-ähnliche Dateiübertragung zu simulieren:
#!/bin/bash
echo "scp file transfer simulation"
echo "Source file: $1"
echo "Destination: $2"
echo "Password: "
read -s password
if [ "$password" == "transfer123" ]; then
echo "Transferring file..."
echo "0%"
sleep 1
echo "25%"
sleep 1
echo "50%"
sleep 1
echo "75%"
sleep 1
echo "100%"
echo "File transfer completed successfully."
else
echo "Authentication failed."
exit 1
fi
Speichern Sie die Datei und machen Sie sie ausführbar:
chmod +x ~/project/file_transfer.sh
Nun erstellen wir ein expect
-Skript, um diese Dateiübertragung zu automatisieren:
cd ~/project
nano file_transfer.exp
Geben Sie den folgenden Inhalt ein:
#!/usr/bin/expect -f
## Set variables
set timeout 10
set source_file "local_file.txt"
set destination "user@remote:/path/to/destination/"
set password "transfer123"
## Create a dummy source file
spawn bash -c "echo 'This is a test file' > $source_file"
expect eof
## Start the file transfer simulation
spawn ./file_transfer.sh $source_file $destination
## Handle the password prompt
expect "Password: "
send "$password\r"
## Monitor the transfer progress
expect "0%"
puts "Transfer started..."
expect "25%"
puts "Transfer 1/4 complete..."
expect "50%"
puts "Transfer 1/2 complete..."
expect "75%"
puts "Transfer 3/4 complete..."
expect "100%"
puts "Transfer almost done..."
expect "File transfer completed successfully."
puts "File transfer automation completed!"
## Clean up the dummy file
spawn bash -c "rm $source_file"
expect eof
Speichern Sie die Datei und machen Sie sie ausführbar:
chmod +x ~/project/file_transfer.exp
Führen Sie das Skript zur Automatisierung der Dateiübertragung aus:
cd ~/project
./file_transfer.exp
Beispielausgabe:
spawn bash -c echo 'This is a test file' > local_file.txt
spawn ./file_transfer.sh local_file.txt user@remote:/path/to/destination/
scp file transfer simulation
Source file: local_file.txt
Destination: user@remote:/path/to/destination/
Password:
Transferring file...
0%
Transfer started...
25%
Transfer 1/4 complete...
50%
Transfer 1/2 complete...
75%
Transfer 3/4 complete...
100%
Transfer almost done...
File transfer completed successfully.
File transfer automation completed!
spawn bash -c rm local_file.txt
Automatisierung der Benutzererstellung mit expect
Nun erstellen wir ein expect
-Skript, das die Benutzererstellung automatisiert. Auch hier simulieren wir diesen Prozess:
cd ~/project
nano create_user.sh
Geben Sie den folgenden Inhalt ein:
#!/bin/bash
echo "User creation utility"
echo "Please enter new username: "
read username
echo "Please enter password for $username: "
read -s password
echo "Please confirm password: "
read -s password_confirm
if [ "$password" != "$password_confirm" ]; then
echo "Error: Passwords do not match."
exit 1
fi
echo "Creating user $username..."
echo "User $username created successfully."
echo "Do you want to add this user to the sudo group? (yes/no): "
read sudo_choice
if [ "$sudo_choice" == "yes" ]; then
echo "Adding $username to sudo group..."
echo "User $username added to sudo group."
fi
echo "User setup completed."
Speichern Sie die Datei und machen Sie sie ausführbar:
chmod +x ~/project/create_user.sh
Nun erstellen wir ein expect
-Skript, um die Benutzererstellung zu automatisieren:
cd ~/project
nano create_user.exp
Geben Sie den folgenden Inhalt ein:
#!/usr/bin/expect -f
## Set variables
set timeout 10
set username "testuser"
set password "P@ssw0rd123"
set add_sudo "yes"
## Start the user creation utility
spawn ./create_user.sh
## Handle the username prompt
expect "Please enter new username: "
send "$username\r"
## Handle the password prompt
expect "Please enter password for $username: "
send "$password\r"
## Handle the password confirmation prompt
expect "Please confirm password: "
send "$password\r"
## Wait for the user creation confirmation
expect "User $username created successfully."
## Handle the sudo prompt
expect "Do you want to add this user to the sudo group? (yes/no): "
send "$add_sudo\r"
## If we chose to add to sudo, wait for confirmation
if {$add_sudo == "yes"} {
expect "User $username added to sudo group."
}
## Wait for completion
expect "User setup completed."
puts "\nUser creation automation completed successfully!"
Speichern Sie die Datei und machen Sie sie ausführbar:
chmod +x ~/project/create_user.exp
Führen Sie das Skript zur Automatisierung der Benutzererstellung aus:
cd ~/project
./create_user.exp
Beispielausgabe:
spawn ./create_user.sh
User creation utility
Please enter new username:
testuser
Please enter password for testuser:
Please confirm password:
Creating user testuser...
User testuser created successfully.
Do you want to add this user to the sudo group? (yes/no):
yes
Adding testuser to sudo group...
User testuser added to sudo group.
User setup completed.
User creation automation completed successfully!
Praktische expect-Skripte verstehen
Die praktischen Skripte, die wir erstellt haben, demonstrieren mehrere wichtige Konzepte für die Automatisierung in der Praxis:
- Sequenzielle Interaktion: Beide Skripte folgen einer definierten Abfolge von Eingabeaufforderungen und Antworten.
- Fortschrittsüberwachung: Das Dateiübertragungsskript überwacht den Fortschritt und liefert benutzerfreundliche Aktualisierungen.
- Bedingte Logik: Das Skript zur Benutzererstellung verwendet bedingte Logik, um die Sudo-Option zu behandeln.
- Umgebungseinrichtung und -bereinigung: Das Dateiübertragungsskript erstellt und bereinigt Testdateien.
Diese Techniken können angewendet werden, um viele gängige Systemadministrationsaufgaben zu automatisieren, wie z. B.:
- Remote-Backups
- Softwareinstallationen
- Systemkonfiguration
- Stapelverarbeitung
Durch die Beherrschung von expect
können Sie komplexe interaktive Prozesse automatisieren, die andernfalls manuelles Eingreifen erfordern würden, wodurch Sie Zeit sparen und das Potenzial für menschliche Fehler reduzieren.