一、expect脚本运行顺序
expect脚本是一个脚本语言,它可以让你自动化执行交互式任务,比如执行ssh登录、ftp上传下载等。expect脚本的运行顺序如下:
#!/bin/bash /usr/bin/expect <我们可以把expect语句看成是在模拟人类在命令行上的操作,比如输入用户名,密码,然后执行命令,最后退出。expect脚本中最核心的命令是spawn和expect,前者是运行一个新的shell进程,并启动一个交互会话;后者用来捕获shell的输出,判断命令执行的状态。
二、expect结束脚本
在很多情况下,我们需要判断expect脚本是否执行成功。一种方法是通过expect eof判断交互过程是否结束,如果结束那么expect命令会返回0,否则会返回一个非零值。我们可以根据这个返回值来判断是否执行成功。
#!/bin/bash /usr/bin/expect <上面的例子中如果登录成功,那么expect会返回0,脚本退出;否则如果出现"Permission denied",则expect会返回非零值,脚本也会退出。
三、shell脚本expect安装
在很多Linux发行版中,expect命令并不会默认安装。我们需要手动安装才能使用。安装方法如下:
sudo apt-get install expect如果你的系统中没有apt-get命令,那么可以尝试其他发行版的包管理器,比如yum,dnf,或者直接从源代码编译安装。但这里不再深入讨论,可以参考expect官方文档进行操作。
四、expect的用法
expect命令的基本用法如下:
expect "string" expect -exact "string" expect -glob "pattern" expect -re "regexp" expect { }其中,-exact选项表示精确匹配,-glob选项表示通配符匹配,-re选项表示正则表达式匹配,而{}用来包含多个expect命令。在使用的时候,我们可以根据需要选择不同的匹配方式,来准确匹配shell的输出。
五、linux中expect
Linux系统中expect命令的使用非常广泛,尤其是在自动化管理中。可以自动化执行ssh登录、ftp上传下载、telnet等各种任务。举一个简单的ssh登录的例子:
#!/usr/bin/expect -f set timeout 20 set user [lindex $argv 0] set passwd [lindex $argv 1] set host [lindex $argv 2] set cmd [lindex $argv 3] spawn ssh $user@$host expect { "(yes/no)*" { send "yes\r" expect "*password:*" send "$passwd\r" } "*assword:*" { send "$passwd\r" } } expect "$*" send "$cmd\r" expect "$*" send "exit\r" expect eof上面的expect脚本使用了spawn命令启动一个新的ssh会话,并通过expect命令匹配输出字符串,来输入用户名和密码。其它的命令依然是通过send和expect命令来执行和捕获。
六、expect命令如何使用
在实际使用中,expect命令有一下几个基本步骤:
1、使用spawn命令启动一个新的交互式会话。
2、使用expect命令匹配输出字符串,并根据输出字符串来输入命令或者密码。
3、使用send命令发送要执行的命令或者字符串。
4、使用expect命令匹配上一条命令的输出,并进行相应的处理,比如判断命令执行是否成功。
5、使用exit命令退出交互式会话,或者通过expect eof命令判断会话是否结束。
七、linux expect用法
在Linux系统中,expect命令的应用非常广泛,特别是在自动化管理中。我们可以使用expect脚本自动执行一些需要交互操作的命令,免去手动操作的繁琐。比如,我们可以用expect来自动安装一些软件包:
#!/bin/bash #/media/site/update/expect/auto_sudo_gcc5.sh #use expect to automate entering password echo $0 function auto_sudo() { expect << EOF spawn sudo su - expect { "*password*" { send "$1\r" } } expect "*#" send "cd /media/site/program/gcc5\r" send "ls -lh\r" send "pwd\r" send "./install.sh\r" send "exit\r" expect eof EOF } auto_sudo "password"上面的expect脚本可以自动安装gcc5,并且自动输入sudo密码,免去了手动输入密码的繁琐。
八、expect的用法shell
expect命令的用法非常灵活,我们可以根据不同的需求来选用不同的匹配方法。在实际使用中,我们也需要结合shell的一些特性来编写expect脚本。比如,我们可以给expect命令设置超时时间,来避免卡顿问题:
#!/usr/bin/expect -f set timeout 20 spawn ssh user@host expect "Password:" send "password\r" expect { ")>" { send "command1\r" expect ")>" send "command2\r" expect ")>" send "exit\r" } timeout { puts "timeout" exit 1 } } expect eof上面的expect脚本中我们使用了timeout命令来设定expect命令的超时时间。如果超时了,那么会执行timeout后的脚本。