以Linux expect解决系统复杂任务(linuxexpect)
Linux expect是一种接口脚本工具,它可以帮助我们快速高效地完成复杂的系统任务。最常见的应用就是它可以用来自动完成标准Unix和Linux下的运维管理任务,例如SSH自动登录、FTP文件传输、Telnet登录等。
首先,在使用Linux expect之前,可以首先安装相关的工具,以支持expect的功能:
apt-get install tcl tk
其中tcl是一种语言,这种语言使用expect进行接口脚本变得更加简单,tk是一种工具集,可以让我们快速的开发Tcl程序。
其次,可以用Linux expect编写复杂的任务脚本,例如自动登录服务器:
spawn ssh ${username}@${ip_address}
expect { "yes/no"
{ send "yes\r"
expect "*assword" { send "${password}\r" } }
"*assword" { send "${password}\r" } }
上面的脚本首先使用spawn命令自动登录服务器,然后使用expect命令控制任务的流程(“yes/no”选择,提供密码),最后使用send命令将数据发送到控制进程中。
最后,Linux expect可以生成一些简单的图形控制台,以完成更复杂的系统控制任务。例如,可以编写一个Tcl程序来控制Linux系统时间:
# 用Tcl包装Linux expect
package require Tk
# 创建应用程序主窗口toplevel .mainwin -width 200 -height 150
wm title .mainwin "Time Manager"
# 创建菜单menubutton .mainwin.File -text "File"
menu .mainwin.File.list -tearoff 0.mainwin.File.list add command -label "Exit" -command exit
# 创建时间选择框frame .mainwin.timelist
label .mainwin.timelist.text -text "时间:"entry .mainwin.timelist.entry -width 15
button .mainwin.timelist.ok -text "设置" -command {set_time}
# 声明proc函数以执行set_timeproc set_time {exp} {
# 获取用户输入的时间 set value [.mainwin.timelist.entry get]
# 使用expect执行 set timeout 10
spawn date -s "$value" expect {
-re "yes/no" { send "y\r"
expect { -re "Is this correct" {
send "y\r" }
timeout { exit
} }
} timeout {
exit }
}}
以上,就是使用Linux expect解决系统复杂任务的示例,它可以帮助我们自动完成标准Unix和Linux下的运维管理任务,极大地提高我们围绕系统任务的工作效率。