search

Detailed explanation of Linux expect

expect can be seen everywhere

The first time I saw the expect command was the first time I participated in the full launch At that time, it was a set of full-scale online tools for automatic deployment, MD5 comparison, and release written by a talented person in the company using Shell scripts. When I was free, I looked at a few of the scripts and a lot of expect commands. I really couldn’t understand the usage of the expect command, so I found time to summarize this article about the expect command.

Recommended: [Linux Video Tutorial]

First raise a question

There are now two Linux hosts A and B, how to ssh from host A to host B, and then execute commands on host B? How to fully automate this process? You may use this method:

ssh admin@10.220.20.15 "ls"

But this method is clumsy. You have to enter the password every time and cannot execute some complex logic or commands. So how to realize full automation? This will use the expectations summarized in today's article.

What is expect?

expect is a free programming tool used to automate interactive tasks without human intervention. To put it bluntly, expect is a set of software used to implement automatic interaction functions.

In actual work, when we run commands, scripts or programs, these commands, scripts or programs need to enter certain instructions to continue running from the terminal, and these inputs need to be done manually. With expect, you can simulate the standard input provided to the program according to the program's prompts, thereby achieving automated interactive execution. This is what is expected! ! !

expect basics

When using expect, you basically deal with the following four commands:

Detailed explanation of Linux expect

## The #send command receives a string parameter and sends the parameter to the process.

The expect command is opposite to the send command. The expect command is usually used to wait for feedback from a process. We then send the corresponding interactive command based on the feedback from the process.

The spawn command is used to start a new process. The send and expect commands after spawn both interact with the process opened using spawn.

The interact command is actually not used very much. Generally, the spawn, send and expect commands can complete our tasks well; but in some special occasions, the interact command still needs to be used. The interact command is mainly Used to exit automation and enter manual interaction. For example, we use the spawn, send and expect commands to complete the ftp login host and perform the file download task. However, we hope that after the file download is completed, we can still stay in the ftp command line state so that we can manually execute subsequent commands. In this case, use the interact command. This task can be completed very well.

Practical code analysis

The above summarizes expect, especially some commonly used commands are explained in detail. The following is a detailed explanation of how to use expect to complete some daily tasks through some commonly used expect scripts.

#!/usr/tcl/bin/expect
set timeout 30
set host "101.200.241.109"
set username "root"
set password "123456"
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
interact

This is a very simple expect sample code that demonstrates the basic use of expect.

#!/usr/tcl/bin/expect: Use expect to interpret the script;

set timeout 30: Set the timeout in seconds, the default is 10 seconds;

set host "101.200.241.109": Set variables;

spawn ssh $username@$host: spawn is an internal command of expect that can be executed after entering the expect environment. If expect is not installed or directly The spawn command cannot be found when executed under the default SHELL. Its main function is to add a shell to the ssh running process to deliver interactive instructions;

expect "*password*": expect here is also an internal command of expect. This command means to determine the last time Whether the output result contains the string "password", if so, it will be returned immediately; otherwise, it will be returned after a period of time. The waiting time here is the 30 seconds set previously;

send "$password\r": When the corresponding output result is matched, the password is sent to the open ssh process and the interactive action is performed;

interact: After the execution is completed, the interactive state is maintained and control is handed over to the console. At this time, you can manually Operated. If there is no such sentence, it will exit after the login is completed, instead of staying on the remote terminal.

This is the analysis of the above simple script. In the above example, it involves a very important concept in expect - mode-action; that is, the above expect "*password*" {send " $password\r"}The meaning expressed by this code.

Mode-Action

Combined with the code expect "*password*" {send "$password\r"}, let's talk about "Mode-Action". To put it simply, if a pattern is matched, the corresponding action will be performed; if the password string is matched, the password will be entered. You may also see code like this:

expect {
    "password" {
        send "$password\r"
        exp_continue
    }
    eof
    {
        send "eof"
    }
}

其中exp_continue表示循环式匹配,通常匹配之后都会退出语句,但如果有exp_continue则可以不断循环匹配,输入多条命令,简化写法。

传参

很多时候,我们需要传递参数到脚本中,现在通过下面这段代码来看看如何在expect中使用参数:

#!/usr/tcl/bin/expect
if {$argc < 3} {
    puts "Usage:cmd <host> <username> <password>"
    exit 1
}
set timeout -1
set host [lindex $argv 0] 
set username [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
interact

在expect中,\$argc表示参数个数,而参数值存放在$argv中,比如取第一个参数就是[lindex $argv 0],以此类推。

总结

能够在工作中熟练的使用Shell脚本就可以很大程度的提高工作效率,如果再搭配上expect,那么很多工作都可以自动化进行,对工作的展开如虎添翼。如果你会Python的话,你的视野将会更加开阔,那个时候你又会“嫌弃”expect了。

The above is the detailed content of Detailed explanation of Linux expect. For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:jellythink. If there is any infringement, please contact admin@php.cn delete
Linux Operations: Utilizing the Maintenance ModeLinux Operations: Utilizing the Maintenance ModeApr 19, 2025 am 12:08 AM

Linux maintenance mode can be entered through the GRUB menu. The specific steps are: 1) Select the kernel in the GRUB menu and press 'e' to edit, 2) Add 'single' or '1' at the end of the 'linux' line, 3) Press Ctrl X to start. Maintenance mode provides a secure environment for tasks such as system repair, password reset and system upgrade.

Linux: How to Enter Recovery Mode (and Maintenance)Linux: How to Enter Recovery Mode (and Maintenance)Apr 18, 2025 am 12:05 AM

The steps to enter Linux recovery mode are: 1. Restart the system and press the specific key to enter the GRUB menu; 2. Select the option with (recoverymode); 3. Select the operation in the recovery mode menu, such as fsck or root. Recovery mode allows you to start the system in single-user mode, perform file system checks and repairs, edit configuration files, and other operations to help solve system problems.

Linux's Essential Components: Explained for BeginnersLinux's Essential Components: Explained for BeginnersApr 17, 2025 am 12:08 AM

The core components of Linux include the kernel, file system, shell and common tools. 1. The kernel manages hardware resources and provides basic services. 2. The file system organizes and stores data. 3. Shell is the interface for users to interact with the system. 4. Common tools help complete daily tasks.

Linux: A Look at Its Fundamental StructureLinux: A Look at Its Fundamental StructureApr 16, 2025 am 12:01 AM

The basic structure of Linux includes the kernel, file system, and shell. 1) Kernel management hardware resources and use uname-r to view the version. 2) The EXT4 file system supports large files and logs and is created using mkfs.ext4. 3) Shell provides command line interaction such as Bash, and lists files using ls-l.

Linux Operations: System Administration and MaintenanceLinux Operations: System Administration and MaintenanceApr 15, 2025 am 12:10 AM

The key steps in Linux system management and maintenance include: 1) Master the basic knowledge, such as file system structure and user management; 2) Carry out system monitoring and resource management, use top, htop and other tools; 3) Use system logs to troubleshoot, use journalctl and other tools; 4) Write automated scripts and task scheduling, use cron tools; 5) implement security management and protection, configure firewalls through iptables; 6) Carry out performance optimization and best practices, adjust kernel parameters and develop good habits.

Understanding Linux's Maintenance Mode: The EssentialsUnderstanding Linux's Maintenance Mode: The EssentialsApr 14, 2025 am 12:04 AM

Linux maintenance mode is entered by adding init=/bin/bash or single parameters at startup. 1. Enter maintenance mode: Edit the GRUB menu and add startup parameters. 2. Remount the file system to read and write mode: mount-oremount,rw/. 3. Repair the file system: Use the fsck command, such as fsck/dev/sda1. 4. Back up the data and operate with caution to avoid data loss.

How Debian improves Hadoop data processing speedHow Debian improves Hadoop data processing speedApr 13, 2025 am 11:54 AM

This article discusses how to improve Hadoop data processing efficiency on Debian systems. Optimization strategies cover hardware upgrades, operating system parameter adjustments, Hadoop configuration modifications, and the use of efficient algorithms and tools. 1. Hardware resource strengthening ensures that all nodes have consistent hardware configurations, especially paying attention to CPU, memory and network equipment performance. Choosing high-performance hardware components is essential to improve overall processing speed. 2. Operating system tunes file descriptors and network connections: Modify the /etc/security/limits.conf file to increase the upper limit of file descriptors and network connections allowed to be opened at the same time by the system. JVM parameter adjustment: Adjust in hadoop-env.sh file

How to learn Debian syslogHow to learn Debian syslogApr 13, 2025 am 11:51 AM

This guide will guide you to learn how to use Syslog in Debian systems. Syslog is a key service in Linux systems for logging system and application log messages. It helps administrators monitor and analyze system activity to quickly identify and resolve problems. 1. Basic knowledge of Syslog The core functions of Syslog include: centrally collecting and managing log messages; supporting multiple log output formats and target locations (such as files or networks); providing real-time log viewing and filtering functions. 2. Install and configure Syslog (using Rsyslog) The Debian system uses Rsyslog by default. You can install it with the following command: sudoaptupdatesud

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft