expect的安装与使用

是什么

expect 是用来进行自动化控制和测试的工具。主要是和交互式软件telnet ftp ssh 等进行自动化的交互。

如何安装

1.检测是否安装

ls /usr/bin |grep expect

如果不存在,则进行安装

2.安装

sudo apt-get install expect
$ ls /usr/bin |grep expect
autoexpect
expect
expect_autoexpect
expect_autopasswd
expect_cryptdir
expect_decryptdir
expect_dislocate
expect_ftp-rfc
expect_kibitz
expect_lpunlock
expect_mkpasswd
expect_multixterm
expect_passmass
expect_rftp
expect_rlogin-cwd
expect_timed-read
expect_timed-run
expect_tknewsbiff
expect_tkpasswd
expect_unbuffer
expect_weather
expect_xkibitz
expect_xpstat

具体使用

案例一,进入ssh脚本

spawn是进入expect环境后才可以执行的expect内部命令。expect是一种脚本语言,它能够代替我们实现与终端的交互,我们不必再守候在电脑旁边输入密码,或是根据系统的输出再运行相应的命令。

1.创建脚本

#! /usr/bin/expect

# 设置超时时间
set timeout 3
# fork一个子进程执行ssh
spawn ssh root@xxx.xxx.xxx.xxx # 捕获到密码
expect "*password*"
# 输入密码并回车
send "xxxxxx\r" # 捕获#
expect "*#"
# 进入常用目录下
send "cd /home/wwwroot/default\r" # 允许用户进行交互
interact

2.创建权限

sudo chmod +x xxx.sh

3.执行脚本

./xxx.sh
jiqing@Ubuntu:~/sh$ ./xxx.sh
spawn ssh root@xxx
root@xxx's password:
Last login: Thu Jun 21 15:07:03 2018 from 218.93.209.10 Welcome to Alibaba Cloud Elastic Compute Service ! [root@iZuf6ingetk3pr7xgv1vq1Z ~]# cd /home/wwwroot/default
[root@iZuf6ingetk3pr7xgv1vq1Z default]#

优化通用版本,支持第一次yes判断,支持ip输入

#! /usr/bin/expect
set ip [lindex $argv 0]
set password [lindex $argv 1]
if {$ip == ""} {
puts "请输入ip"
exit
} if {$password == ""} {
set password "123456"
} # 设置超时时间
set timeout 3
# fork一个子进程执行ssh
spawn ssh root@$ip expect {
"*yes/no*" { send "yes\r"; exp_continue}
"*password*" { send "$password\r" }
} # 捕获到密码
# expect "*password*"
# 输入密码并回车
# send "$password\r" # 捕获#
expect "*#"
# 进入常用目录下
send "cd /home/wwwroot/default\r" # 允许用户进行交互
interact

继续升级成昵称,比ip更好用

#! /usr/bin/expect
set pro_name [lindex $argv 0]
set password [lindex $argv 1]
if {$pro_name == ""} {
puts "请输入名称"
exit
} switch $pro_name {
"meiren" -
"yanglu" -
"wenbo" {
set ip "ip1"
}
"siemens" {
set ip "ip2"
}
"tqmp" {
set ip "ip3"
}
default {
puts "请输入正确的名称"
exit
}
} if {$password == ""} {
set password "xxx"
} # 设置超时时间
set timeout 3
# fork一个子进程执行ssh
spawn ssh root@$ip expect {
"*yes/no*" { send "yes\r"; exp_continue}
"*password:*" { send "$password\r" }
} # 捕获到密码
# expect "*password*"
# 输入密码并回车
# send "$password\r" # 捕获#
expect "*#"
# 进入常用目录下
send "cd /home/wwwroot/default\r" # 允许用户进行交互
interact

666 ,一个脚本,一键链接ssh。

案例二,进行cd操作

#! /usr/bin/expect
# 跳转到项目目录下
set pro_name [lindex $argv 0]
spawn bash
if {$pro_name != ""} {
set target_dir "/home/wwwroot/default/$pro_name"
} else {
set target_dir "/home/wwwroot/default"
}
# 判断目录是否存在
if {![file isdirectory $target_dir]} {
puts "项目目录不存在"
set target_dir "/home/wwwroot/default"
}
send "cd $target_dir\r"
interact

ps:expect的语法与shell脚本有点不同,多用用就习惯了。运用起来,让他们帮助你更好的工作。

更多功能,需要在工作中去探索和使用。我爱linux。

expect的安装与使用的更多相关文章

  1. [转]expect的安装

    转自:http://blog.chinaunix.net/uid-20639775-id-2453085.html Expect是在Tcl基础上创建起来的,它还提供了一些Tcl所没有的命令,它可以用来 ...

  2. linux下expect环境安装以及简单脚本测试

    expect是交互性很强的脚本语言,可以帮助运维人员实现批量管理成千上百台服务器操作,是一款很实用的批量部署工具!expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装 下 ...

  3. expect神器安装和使用

    安装: mdkir /data/tools cd /data/tools wget http://prdownloads.sourceforge.net/tcl/tcl8.5.19-src.tar.g ...

  4. expect交互式安装软件

    公司一些宿主机需要安装软件,吴老师要求写一个安装脚本: 脚本思路:首先要把安装的包拷贝到每台机器上,然后要让每台机器都运行一次安装命令:就想到了应用scp.ssh命令,但这两个命令需要输入对端密码,需 ...

  5. Linux Tcl和Expect的安装

    一.先安装Tcl 1.下载:tcl版本 8.4.19 http://sourceforge.net/projects/tcl/files/Tcl/8.4.19/tcl8.4.19-src.tar.gz ...

  6. Linxu下 expect的安装与使用

    expect学习 1.什么是except        Expect是基于Tcl的一个相对简单的免费脚本文件语言工具,用于实现自动和交互式程序进行通信            is a software ...

  7. Linux expect的安装与使用

    Expect是在Tcl的基础上创建的,可以用来做一些Linux下无法做到交互的命令操作,可用于远程管理服务器. 一.安装Tcl: 1.下载源码包: wget http://nchc.dl.source ...

  8. expect离线安装

    expect5.45.4.tar.gz和tcl8.4.11-src.tar.gz压缩包请前往以下链接下载: https://download.csdn.net/download/gangzi221/1 ...

  9. expect 安装使用

    expect 命令相当于crt远程连接,可用于脚本化实现多服务器巡检功能. 一.expect 命令安装: 1.rpm 文件下载:百度云链接:http://pan.baidu.com/s/1sl1wSU ...

随机推荐

  1. android图片上传

    package com.example.center; import java.io.ByteArrayOutputStream;import java.io.InputStream; import ...

  2. 树莓派用gobot测试舵机的使用

    package main import ( "gobot.io/x/gobot" "gobot.io/x/gobot/drivers/gpio" "g ...

  3. python多线程(二)

    原文:http://blog.sina.com.cn/s/blog_4b5039210100esc1.html 基础不必多讲,还是直接进入python. Python代码代码的执行由python虚拟机 ...

  4. HNOI_2002 营业额统计(Splay)

    此题可以用STL的multiset解决,也可以手打一棵伸展树(Splay)来求前驱与后驱. 使用multiset: #include<iostream> #include<set&g ...

  5. MFC中的几种播放声音的方法

    一.播放声音文件的简单方法 在VC++ 中的多媒体动态连接库中提供了一组与音频设备有关的函数.利用这些函数可以方便地播放声音.最简单的播放声音方法就是直接调用VC++中提供的声音播放函 数BOOL s ...

  6. java cocurrent并发包

    1. java.util.concurrent - Java 并发工具包Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Jav ...

  7. Spring -- Bean自己主动装配&amp;Bean之间关系&amp;Bean的作用域

    对于学习spring有帮助的站点:http://jinnianshilongnian.iteye.com/blog/1482071 Bean的自己主动装配 Spring IOC 容器能够自己主动装配 ...

  8. HDU2897( 巴什博奕变形)

    邂逅明下 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  9. mysql中游标在存储过程中的具体使用方法

    昨天写的一个东东,分享下给大家. drop PROCEDURE  if exists sp_cleanUserData; CREATE  PROCEDURE `sp_cleanUserData`()  ...

  10. hdu5289(2015多校1)--Assignment(单调队列)

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...