Home Operation and Maintenance Linux Operation and Maintenance Detailed explanation of Linux expect

Detailed explanation of Linux expect

Aug 09, 2019 pm 02:22 PM
linux

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"
Copy after login

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
Copy after login

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"
    }
}
Copy after login

其中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
Copy after login

在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 of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

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

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1664
14
PHP Tutorial
1268
29
C# Tutorial
1240
24
Linux Architecture: Unveiling the 5 Basic Components Linux Architecture: Unveiling the 5 Basic Components Apr 20, 2025 am 12:04 AM

The five basic components of the Linux system are: 1. Kernel, 2. System library, 3. System utilities, 4. Graphical user interface, 5. Applications. The kernel manages hardware resources, the system library provides precompiled functions, system utilities are used for system management, the GUI provides visual interaction, and applications use these components to implement functions.

How to check the warehouse address of git How to check the warehouse address of git Apr 17, 2025 pm 01:54 PM

To view the Git repository address, perform the following steps: 1. Open the command line and navigate to the repository directory; 2. Run the "git remote -v" command; 3. View the repository name in the output and its corresponding address.

vscode Previous Next Shortcut Key vscode Previous Next Shortcut Key Apr 15, 2025 pm 10:51 PM

VS Code One-step/Next step shortcut key usage: One-step (backward): Windows/Linux: Ctrl ←; macOS: Cmd ←Next step (forward): Windows/Linux: Ctrl →; macOS: Cmd →

How to run java code in notepad How to run java code in notepad Apr 16, 2025 pm 07:39 PM

Although Notepad cannot run Java code directly, it can be achieved by using other tools: using the command line compiler (javac) to generate a bytecode file (filename.class). Use the Java interpreter (java) to interpret bytecode, execute the code, and output the result.

What is the main purpose of Linux? What is the main purpose of Linux? Apr 16, 2025 am 12:19 AM

The main uses of Linux include: 1. Server operating system, 2. Embedded system, 3. Desktop operating system, 4. Development and testing environment. Linux excels in these areas, providing stability, security and efficient development tools.

How to run sublime after writing the code How to run sublime after writing the code Apr 16, 2025 am 08:51 AM

There are six ways to run code in Sublime: through hotkeys, menus, build systems, command lines, set default build systems, and custom build commands, and run individual files/projects by right-clicking on projects/files. The build system availability depends on the installation of Sublime Text.

laravel installation code laravel installation code Apr 18, 2025 pm 12:30 PM

To install Laravel, follow these steps in sequence: Install Composer (for macOS/Linux and Windows) Install Laravel Installer Create a new project Start Service Access Application (URL: http://127.0.0.1:8000) Set up the database connection (if required)

git software installation git software installation Apr 17, 2025 am 11:57 AM

Installing Git software includes the following steps: Download the installation package and run the installation package to verify the installation configuration Git installation Git Bash (Windows only)

See all articles