Rumah Operasi dan penyelenggaraan operasi dan penyelenggaraan linux 实例讲解expect命令实现Shell自动化交互

实例讲解expect命令实现Shell自动化交互

Dec 22, 2017 am 09:19 AM
Pesanan capai

本文我们将实例讲解expect命令实现Shell自动化交互,我们通过Shell可以实现简单的控制流功能,如:循环、判断等。下面这篇文章主要给大家介绍了关于利用expect命令实现Shell自动化交互的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。

背景

linux脚本中有很多场景是进行远程操作的,例如远程登录ssh、远程复制scp、文件传输sftp等。这些命令中都会涉及到安全密码的输入,正常使用命令时是需要人工手动输入密码并接受安全验证的。为了实现自动化远程操作,我们可以借用expect的功能。

expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。expect是不断发展的,随着时间的流逝,其功能越来越强大,已经成为系统管理员的的一个强大助手。expect需要Tcl编程语言的支持,要在系统上运行expect必须首先安装Tcl。

expect的安装

expect是在Tcl基础上创建起来的,所以在安装expect前我们应该先安装Tcl。

(一)Tcl 安装

主页: http://www.tcl.tk

下载地址: http://www.tcl.tk/software/tcltk/downloadnow84.tml

1.下载源码包

wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.11-src.tar.gz
Salin selepas log masuk

2.解压缩源码包

tar xfvz tcl8.4.11-src.tar.gz
Salin selepas log masuk

3.安装配置

cd tcl8.4.11/unix 
./configure --prefix=/usr/tcl --enable-shared 
make 
make install
Salin selepas log masuk

注意:

1、安装完毕以后,进入tcl源代码的根目录,把子目录unix下面的tclUnixPort.h copy到子目录generic中。

2、暂时不要删除tcl源代码,因为expect的安装过程还需要用。

(二)expect 安装 (需Tcl的库)

主页: http://expect.nist.gov/

1.下载源码包

wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download
Salin selepas log masuk

2.解压缩源码包

tar xzvf expect5.45.tar.gz
Salin selepas log masuk

3.安装配置

cd expect5.45 
./configure --prefix=/usr/expect --with-tcl=/usr/tcl/lib --with-tclinclude=../tcl8.4.11/generic 
make 
make install 
ln -s /usr/tcl/bin/expect /usr/expect/bin/expect
Salin selepas log masuk

expect

expect的核心是spawn、expect、send、set。

spawn 调用要执行的命令

  • expect 等待命令提示信息的出现,也就是捕捉用户输入的提示:

  • send 发送需要交互的值,替代了用户手动输入内容

  • set 设置变量值

  • interact 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。

  • expect eof 这个一定要加,与spawn对应表示捕获终端输出信息终止,类似于if....endif

expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了。

其他设置

  • 设置expect永不超时 set timeout -1

  • 设置expect 300秒超时,如果超过300没有expect内容出现,则退出 set timeout 300

expect编写语法

expect使用的是tcl语法

  • 一条Tcl命令由空格分割的单词组成. 其中, 第一个单词是命令名称, 其余的是命令参数
    cmd arg arg arg

  • $符号代表变量的值. 在本例中, 变量名称是foo.
    $foo

  • 方括号执行了一个嵌套命令. 例如, 如果你想传递一个命令的结果作为另外一个命令的参数, 那么你使用这个符号
    [cmd arg]

  • 双引号把词组标记为命令的一个参数. "$"符号和方括号在双引号内仍被解释
    "some stuff"

  • 大括号也把词组标记为命令的一个参数. 但是, 其他符号在大括号内不被解释
    {some stuff}

  • 反斜线符号是用来引用特殊符号. 例如:n 代表换行. 反斜线符号也被用来关闭"$"符号, 引号,方括号和大括号的特殊含义

示例

login.exp专用于远程登录,快捷使用方式: login.exp "exclude" "${remote_ip}" "${remote_user}" "${remote_passwd}" "${remote_command}"

#!/usr/bin/expect -f
##########################################################
# 通过SSH登陆和执行命令
#参数:1.Use_Type [check/execute]
#  2.SSHServerIp
#  3.SSHUser
#  4.SSHPassword
#  5.CommandList [多个命令间以;间隔]
#返回值:
#  0 成功
#  1 参数个数不正确
#  2 SSH 服务器服务没有打开
#  3 SSH 用户密码不正确
#  4 连接SSH服务器超时
##########################################################
proc usage {} {
 regsub ".*/" $::argv0 "" name
 send_user "Usage:\n"
 send_user " $name Use_Type SSHServerIp SSHUser SSHPassword CommandList\n"
 exit 1
} 
## 判断参数个数
if {[llength $argv] != 5} {
 usage
}
#设置变量值
set Use_Type [lindex $argv 0]
set SSHServerIp [lindex $argv 1]
set SSHUser [lindex $argv 2]
set SSHPassword [lindex $argv 3]
set CommandList [lindex $argv 4]
#spawn ping ${SSHServerIp} -w 5
#expect {
# -nocase -re "100% packet loss" {
#  send_error "Ping ${SSHServerIp} is unreachable, Please check the IP address.\n"
#  exit 1
# }
#}
set timeout 360
set resssh 0
#定义变量标记ssh连接时是否输入yes确认
set inputYes 0
set ok_string LOGIN_SUCCESS
if {$Use_Type=="check"} {
 #激活ssh连接,如果要需要输入yes确认,输入yes,设置inputYes为1,否则输入ssh密码
 spawn ssh ${SSHUser}@${SSHServerIp} "echo $ok_string"
} else {   
 spawn ssh ${SSHUser}@${SSHServerIp} "$CommandList"
}
expect {
 -nocase -re "yes/no" {
  send -- "yes\n"
  set inputYes 1
 }
 -nocase -re "assword: " {
  send -- "${SSHPassword}\n"
  set resssh 1
 }
 #-nocase -re "Last login: " { 
 #  send -- "${CommandList}\n"
 #}
 $ok_string {}
 -nocase -re "Connection refused" {
  send_error "SSH services at ${SSHServerIp} is not active.\n"
  exit 2
 }
 timeout {
  send_error "Connect to SSH server ${SSHUser}@${SSHServerIp} timeout(10s).\n"
  exit 4
 }
}
#如果输入了yes确认,输入ssh密码
if {$inputYes==1} {
 expect {
  -nocase -re "assword: " {
   send -- "${SSHPassword}\n"
   set resssh 1
  }
 }
}
#如果出现try again或者password:提示,说明输入的用户密码错误,直接退出。
if {$resssh==1} {
 expect {
  -nocase -re "try again" {
   send_error "SSH user:${SSHUser} passwd error.\n"
   exit 3
  }
  -nocase -re "assword:" {
   send_error "SSH user:${SSHUser} passwd error.\n"
   exit 3
  }
  eof {}
 }
}
send_error -- "$expect_out(buffer)"
#-nocase -re "No such user" {
#  send_error "No such user.\n"
#  exit 5
# }
#exit
Salin selepas log masuk

大家学会了吗?希望学完本文之后大家对shell自动化交互有更深的掌握。

相关推荐:

Linux Shell制作录制回放功能脚本

Python实现shell sed替换简单的功能

Linux shell ftp按照日期去下载文件的方法

Atas ialah kandungan terperinci 实例讲解expect命令实现Shell自动化交互. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menjalankan arahan SUDO dalam Windows 11/10 Bagaimana untuk menjalankan arahan SUDO dalam Windows 11/10 Mar 09, 2024 am 09:50 AM

Perintah sudo membolehkan pengguna menjalankan arahan dalam mod keistimewaan tinggi tanpa bertukar kepada mod superuser. Artikel ini akan memperkenalkan cara untuk mensimulasikan fungsi yang serupa dengan arahan sudo dalam sistem Windows. Apakah Perintah Shudao? Sudo (singkatan untuk "superuser do") ialah alat baris perintah yang membenarkan pengguna sistem pengendalian berasaskan Unix seperti Linux dan MacOS untuk melaksanakan arahan dengan keistimewaan tinggi yang biasanya dipegang oleh pentadbir. Menjalankan arahan SUDO dalam Windows 11/10 Walau bagaimanapun, dengan pelancaran versi pratonton Windows 11 Insider terkini, pengguna Windows kini boleh mengalami ciri ini. Ciri baharu ini membolehkan pengguna

Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Mar 24, 2024 am 11:27 AM

Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Dengan kebangkitan media sosial, WeChat telah menjadi salah satu alat komunikasi yang sangat diperlukan dalam kehidupan seharian orang ramai. Walau bagaimanapun, ramai orang mungkin menghadapi masalah: log masuk ke beberapa akaun WeChat pada masa yang sama pada telefon mudah alih yang sama. Bagi pengguna telefon mudah alih Huawei, tidak sukar untuk mencapai log masuk WeChat dwi Artikel ini akan memperkenalkan cara mencapai log masuk WeChat dwi pada telefon mudah alih Huawei. Pertama sekali, sistem EMUI yang disertakan dengan telefon mudah alih Huawei menyediakan fungsi yang sangat mudah - pembukaan dua aplikasi. Melalui fungsi pembukaan dwi aplikasi, pengguna boleh serentak

Bagaimana untuk menyemak alamat MAC kad rangkaian dalam Win11? Bagaimana untuk menggunakan arahan untuk mendapatkan alamat MAC kad rangkaian dalam Win11 Bagaimana untuk menyemak alamat MAC kad rangkaian dalam Win11? Bagaimana untuk menggunakan arahan untuk mendapatkan alamat MAC kad rangkaian dalam Win11 Feb 29, 2024 pm 04:34 PM

Artikel ini akan memperkenalkan pembaca kepada cara menggunakan gesaan arahan (CommandPrompt) untuk mencari alamat fizikal (alamat MAC) penyesuai rangkaian dalam sistem Win11. Alamat MAC ialah pengecam unik untuk kad antara muka rangkaian (NIC), yang memainkan peranan penting dalam komunikasi rangkaian. Melalui gesaan arahan, pengguna boleh dengan mudah mendapatkan maklumat alamat MAC semua penyesuai rangkaian pada komputer semasa, yang sangat membantu untuk menyelesaikan masalah rangkaian, mengkonfigurasi tetapan rangkaian dan tugas lain. Kaedah 1: Gunakan "Command Prompt" 1. Tekan kombinasi kekunci [Win+X], atau [klik kanan] klik [logo Windows] pada bar tugas, dan dalam item menu yang terbuka, pilih [Run]; . Jalankan tetingkap , masukkan perintah [cmd] dan kemudian

Di manakah mod sesi dipertingkatkan hyperv Petua untuk mendayakan atau melumpuhkan mod sesi dipertingkatkan Hyper-V menggunakan arahan dalam Win11 Di manakah mod sesi dipertingkatkan hyperv Petua untuk mendayakan atau melumpuhkan mod sesi dipertingkatkan Hyper-V menggunakan arahan dalam Win11 Feb 29, 2024 pm 05:52 PM

Dalam sistem Win11, anda boleh mendayakan atau melumpuhkan mod sesi dipertingkatkan Hyper-V melalui arahan. Artikel ini akan memperkenalkan cara menggunakan arahan untuk mengendalikan dan membantu pengguna mengurus dan mengawal fungsi Hyper-V dalam sistem dengan lebih baik. Hyper-V ialah teknologi virtualisasi yang disediakan oleh Microsoft Ia dibina ke dalam Windows Server dan Windows 10 dan 11 (kecuali Home Edition), membenarkan pengguna menjalankan sistem pengendalian maya dalam sistem Windows. Walaupun mesin maya diasingkan daripada sistem pengendalian hos, mereka masih boleh menggunakan sumber hos, seperti kad bunyi dan peranti storan, melalui tetapan. Salah satu tetapan utama adalah untuk mendayakan Mod Sesi Dipertingkat. Mod sesi dipertingkatkan ialah Hiper

Sangat praktikal! Perintah Sar yang menjadikan anda ahli Linux Sangat praktikal! Perintah Sar yang menjadikan anda ahli Linux Mar 01, 2024 am 08:01 AM

1. Gambaran Keseluruhan Perintah sar memaparkan laporan penggunaan sistem melalui data yang dikumpul daripada aktiviti sistem. Laporan ini terdiri daripada bahagian yang berbeza, setiap satu mengandungi jenis data dan masa data dikumpulkan. Mod lalai perintah sar memaparkan penggunaan CPU pada kenaikan masa yang berbeza untuk pelbagai sumber yang mengakses CPU (seperti pengguna, sistem, penjadual I/O, dsb.). Selain itu, ia memaparkan peratusan CPU terbiar untuk tempoh masa tertentu. Nilai purata untuk setiap titik data disenaraikan di bahagian bawah laporan. laporan sar mengumpul data setiap 10 minit secara lalai, tetapi anda boleh menggunakan pelbagai pilihan untuk menapis dan melaraskan laporan ini. Sama seperti arahan masa aktif, arahan sar juga boleh membantu anda memantau beban CPU. Melalui sar, anda boleh memahami berlakunya beban yang berlebihan

Panduan Pengaturcaraan PHP: Kaedah untuk Melaksanakan Jujukan Fibonacci Panduan Pengaturcaraan PHP: Kaedah untuk Melaksanakan Jujukan Fibonacci Mar 20, 2024 pm 04:54 PM

Bahasa pengaturcaraan PHP ialah alat yang berkuasa untuk pembangunan web, yang mampu menyokong pelbagai logik dan algoritma pengaturcaraan yang berbeza. Antaranya, melaksanakan jujukan Fibonacci adalah masalah pengaturcaraan biasa dan klasik. Dalam artikel ini, kami akan memperkenalkan cara menggunakan bahasa pengaturcaraan PHP untuk melaksanakan jujukan Fibonacci, dan melampirkan contoh kod tertentu. Jujukan Fibonacci ialah jujukan matematik yang ditakrifkan seperti berikut: unsur pertama dan kedua bagi jujukan ialah 1, dan bermula dari unsur ketiga, nilai setiap unsur adalah sama dengan jumlah dua unsur sebelumnya. Beberapa elemen pertama urutan

Bagaimana untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Bagaimana untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Mar 24, 2024 pm 06:03 PM

Bagaimana untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Dengan populariti perisian sosial dan penekanan yang semakin meningkat terhadap privasi dan keselamatan orang ramai, fungsi klon WeChat telah beransur-ansur menjadi tumpuan perhatian. Fungsi klon WeChat boleh membantu pengguna log masuk ke berbilang akaun WeChat pada telefon mudah alih yang sama pada masa yang sama, menjadikannya lebih mudah untuk diurus dan digunakan. Tidak sukar untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Anda hanya perlu mengikuti langkah berikut. Langkah 1: Pastikan versi sistem telefon mudah alih dan versi WeChat memenuhi keperluan Pertama, pastikan versi sistem telefon mudah alih Huawei anda telah dikemas kini kepada versi terkini, serta Apl WeChat.

Apakah cara yang betul untuk memulakan semula perkhidmatan dalam Linux? Apakah cara yang betul untuk memulakan semula perkhidmatan dalam Linux? Mar 15, 2024 am 09:09 AM

Apakah cara yang betul untuk memulakan semula perkhidmatan dalam Linux? Apabila menggunakan sistem Linux, kami sering menghadapi situasi di mana kami perlu memulakan semula perkhidmatan tertentu, tetapi kadangkala kami mungkin menghadapi beberapa masalah semasa memulakan semula perkhidmatan, seperti perkhidmatan tidak benar-benar berhenti atau bermula. Oleh itu, adalah sangat penting untuk menguasai cara yang betul untuk memulakan semula perkhidmatan. Di Linux, anda biasanya boleh menggunakan perintah systemctl untuk mengurus perkhidmatan sistem. Perintah systemctl adalah sebahagian daripada pengurus sistem systemd

See all articles