写了一个expect脚本 执行ssh命令远程登录 然后telnet另外一台机器

大致如下:

 #!/usr/bin/expect -f
set timeout
set port_type [lindex $argv ]
set p1 [lindex $argv ]
set p2 [lindex $argv ]
set p3 [lindex $argv ]
set p4 [lindex $argv ]
set p5 [lindex $argv ] if { $port_type eq "http" } {
#puts "{\"retcode\":\"0\",\"retinfo\":\"in-http\"}"
#puts "port_type=$port_type p1=$p1 p2=$p2 p3=$p3 p4=$p4 p5=$p5 p6=$p6"
spawn ssh $p2@$p1
expect_after eof { exit } expect "yes/no" { send "yes\r" }
expect "*assword:" { send "$p3\r" } #spawn
#expect "Welcome" { send "telnet $p4 $p5\r" }
expect "*#" { send "telnet $p4 $p5\r" }
expect "Connected to" { puts "{\"retcode\":\"0\",\"retinfo\":\"success\"}"
exit
}
puts "{\"retcode\":\"-2\",\"retinfo\":\"fail\"}" } elseif { $port_type eq "mysql" } {
set p6 [lindex $argv ]
set p7 [lindex $argv ]
#puts "{\"retcode\":\"0\",\"retinfo\":\"in-mysql\"}"
#puts "port_type=$port_type p1=$p1 p2=$p2 p3=$p3 p4=$p4 p5=$p5 p6=$p6 p7=$p7"
spawn ssh $p2@$p1
expect_after eof { exit } expect "yes/no" { send "yes\r" }
expect "*assword:" { send "$p3\r" } expect "Welcome" { send "mysql -h $p4 -P $p5 -u $p6 -p $p7\r" }
expect "#" { send "mysql -h $p4 -P $p5 -u $p6 -p $p7\r" }
expect "$" { send "mysql -h $p4 -P $p5 -u $p6 -p $p7\r" } expect "Welcome to the MySQL" {
puts "{\"retcode\":\"0\",\"retinfo\":\"success\"}"
exit
}
puts "{\"retcode\":\"-2\",\"retinfo\":\"fail\"}"
} elseif { $port_type eq "oracle" } {
set p6 [lindex $argv ]
set p7 [lindex $argv ]
set p8 [lindex $argv ]
#puts "{'retcode':0,'retinfo':'into-oracle'}"
#puts "{\"retcode\":\"0\",\"retinfo\":\"in-mysql\"}"
#puts "port_type=$port_type p1=$p1 p2=$p2 p3=$p3 p4=$p4 p5=$p5 p6=$p6 p7=$p7 p8=$p8"
spawn ssh $p2@$p1
expect_after eof { exit } expect "yes/no" { send "yes\r" }
expect "*assword:" { send "$p3\r" } expect "Welcome" { send "sqlplus $p4/$p5@//$p6:$p7/$p8\r" }
expect "#" { send "sqlplus $p4/$p5@//$p6:$p7/$p8\r" }
expect "$" { send "sqlplus $p4/$p5@//$p6:$p7/$p8\r" } expect "SQL*Plus" {
puts "{\"retcode\":\"0\",\"retinfo\":\"success\"}"
exit
}
puts "{\"retcode\":\"-2\",\"retinfo\":\"fail\"}"
}
#interact

然后PHP中 :

$a = system('expect.sh');

然后用xshell客户端执行

 curl -d "{\"interface\":\"test\",\"p1\":\"http\",\"p2\":\"120\",\"p3\":\"127.0.0.52\",\"p4\":\"username\",\"p5\":\"password\",\"tel_ip\":\"127.0.0.53\",\"tel_port\":\"80\"}" "http://www.test.com/test.php"
 
这时候xshell会显示所有expect执行步骤 所以初步尝试修改成了
exec('expect.sh',$a);
 
结果虽然不会直接显示在xshell客户端 但是还是会把所有执行步骤的代码输出到$a里面 而我本来只是想把expect里面的puts “sometext”命令的输出返回给$a 后来问同事 知道了可以修改成
$a = exec('expect.sh');
这样就完美解决问题了!!

关于expect脚本输出的问题的更多相关文章

  1. Linux 下 expect 脚本语言中交互处理常用命令

    Linux 下 expect 脚本语言中交互处理常用命令 1. #!/usr/bin/expect 告诉操作系统脚本里的代码使用那一个 shell 来执行.这里的 expect 其实和 Linux 下 ...

  2. tck/tl 以及expect脚本

    最近有用到,利用expcet脚本自动登录到远程服务器并提权执行脚本. 搜集的知识如下: tcl/tk参考——列表操作lindex expect脚本解释 代码如下 #!/usr/bin/expect - ...

  3. expect脚本自动获取root权限

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

  4. expect脚本远程登录、远程执行命令和脚本传参简单用法

    expect介绍: 最近想写一个自动化安装脚本,涉及到远程登录.分发文件包.远程执行命令等,其中少不了来回输入登录密码,交互式输入命令等,这样就大大降低了效率,那么有什么方法能解决呢?不妨试试expe ...

  5. shell脚本嵌套expect脚本

    #!/bin/sh echo "helo" password='xxxx' ###不能在下面的expect脚本段设置成 set password xxxx否则获取不到变量,单独的e ...

  6. 使用expect脚本语言写一键发布服务(代码发布、所有服务重启)

    互联网服务有很多台服务,但是在上线的时候需要将这些服务版本都更新与个个都重启,下面的脚本语言,就是一键发布服务~ 1.在/home/weihu/deploy/ 目录下建下publish .publis ...

  7. linux c程序中获取shell脚本输出的实现方法

    linux c程序中获取shell脚本输出的实现方法 1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作. ...

  8. Mac 让 iTerm2 记住用户名密码 expect 脚本

    刚刚用iTerm2的时候,总是要一遍遍的敲用户名.密码. 我在想, 能不能像Windows的软件一样,可以直接让软件记住.然后只要点击一下,就直接ssh到远程服务器上面去了. 之后经过搜索,可以用ex ...

  9. ZABBIX自定义用户KEY与参数USERPARAMETERS监控脚本输出

    zabbix在模板中预定义了一些key,但通常情况,并不能满足我们的需求.幸运的是zabbix提供了自定义key的方法,因此我们可以灵活的监控各种我们想要监控的数据. 定义配置文件 通过yum安装的z ...

随机推荐

  1. Laravel — homestead 配置多站点

    一.homestead.yaml 配置 homestead.yaml 文件配置sites,如下 sites: - map: homestead.test to: /home/vagrant/Code/ ...

  2. 描述符应用 -- 让python变成一个强类型的语言

    众所周知,python是一门弱类型的语言,变量可以随意赋值成任意类型,但是通过描述符,我们可以把数据变成强类型的. 我们为数据设置数据描述符,因为数据描述的优先级大于实例属性,所以在给数据赋值的时候会 ...

  3. Gym - 101908G Gasoline 二分+最大流

    G - Gasoline Gym - 101908G 题意:给出R个提供点,P个接收点,每个接收点都要接收满,还有一个运输的时间,问最小时间能够完成所有的运输 题解:首先每次都必须要满流,所以我们只要 ...

  4. kuangbin 最短路集合

    Til the Cows Come Home poj-2387 #include<iostream> #include<cstdio> #include<algorith ...

  5. 最近使用Nginx的一点新得

    1.基本的负载配置 Nginx最简单的配置模块如下 upstream name{ server ip:port; server ip:port; } server { listen 80; serve ...

  6. OpenCV学习笔记(六) 滤波器 形态学操作(腐蚀、膨胀等)

    转自:OpenCV 教程 另附:计算机视觉:算法与应用(2012),Learning OpenCV(2009) 平滑图像:滤波器 平滑 也称 模糊, 是一项简单且使用频率很高的图像处理方法.平滑处理的 ...

  7. proguaid 混淆代码

    注意:这里有一个坑.就是-ignorewarnings 他老是混淆不了,告诉你不行.其实加上这句话,就可以了. 下面贴一下代码: -injars c:/ceb_lib.jar -outjars c:/ ...

  8. Effictive C++ 学习记录

    这是前段时间看的书,整理到这里吧,以后查看也方便. 这些条款需要反复查看. 条款01:视C++为一个语言联邦 条款02:尽量用const.enum.inline替换#define 条款03:尽可能的使 ...

  9. python 学习分享-实战篇选课系统

    # 角色:学校.学员.课程.讲师 # 要求: # 1. 创建北京.上海 2 所学校 # 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 # ...

  10. vs编译生成之后报错

    严重性 代码 说明 项目 文件行 禁止显示状态 错误 CS2001 Source file 'D:\Local\Apright_LW-Wiseb2b\Feekong.Model\obj\Release ...