shell尽管很强大。但是貌似无法完成交互式命令的操作,实例 ssh host 如果host而且该机没有加入信任。手动输入的时间需要password。

这样的情况下可以使用expect支持。



下面举个样例来说明expect的功能与使用:



功能:对集群各机器运行同样指令 如 集群ip 为 :192.168.6.1~192.168.6.10。须要在这10台机器上 同一时候 以tt用户登录 并运行 mkdir ttji_314命令。

首先 定义一个hostlist文件 :

192.168.6.1
192.168.6.2
192.168.6.3
192.168.6.4
192.168.6.5
192.168.6.6
192.168.6.7
192.168.6.8
192.168.6.9
192.168.6.10

然后定义一个 expect脚本 完毕在单个机器运行命令:ssh_comm.sh

#!/usr/bin/expect
set host [lindex $argv 0]
set command [lindex $argv 1]
set password 123456
set username tt
set timeout 1 send_user "connect to $host ...\n"
spawn ssh -l $username $host expect "password:"
send "$password\r" expect "#$"
send "$command\r" expect "#$"
send "exit\r" #interact
expect eof

几点说明 :

1 首行加上/usr/bin/expect

2 spawn: 后面加上须要运行的shell 命令
3 expect: 仅仅有spawn 运行的命令结果才会被expect 捕捉到,由于spawn 会启
动一个进程,仅仅有这个进程的相关信息才会被捕捉到。主要包含:标准输入的提
示信息,eof 和timeout。

4 send 和send_user:send 会将expect 脚本中须要的信息发送给spawn 启动
的那个进程,而send_user 仅仅是回显用户发出的信息,类似于shell 中的echo 而
已。
5.set timeout 1之后的指令将都等待1s。


最后完毕批量功能:command_all.sh
#!/bin/bash

function use() {
echo "========================"
echo "./command_all.sh hostlist command"
echo "========================"
} if [ $# != 2 ]
then
use
else
echo "welcome to use:\n"
fi file=$1
command=$2 echo $file
echo $command while read line
do
#echo $line
./ssh_comm.sh $line "$command"
done < $file

使用:

./command_all.sh hostlist "mkdir ttji_314"

有个问题:当在expect脚本中 使用root用户登录的时候 似乎没有timeout这样的概念 ,运行完命令马上返回;

而用普通用户才会有这样的体现。

若有了解的同学请留言不吝赐教,不胜感激~

版权声明:本文博主原创文章,博客,未经同意不得转载。

交互式命令 expect的更多相关文章

  1. expect入门--自动化linux交互式命令

    很多linux程序比如passwd,ftp,scp,ssh等自身并没有提供一种静默式的执行选项,而是依赖于运行时的终端输入来进行后一步的操作比如更改密码.文件上传.下载等.虽然有些编程语言如java嵌 ...

  2. 两种Linux下非交互式命令的实现

    一.概述 在Linux环境,有多种实现自己主动化的脚本语言.如Shell.Python.Perl.Tcl等. Shell语言因与Shell外壳结合紧密,是最常见的实现自己主动化的脚本语言. 同一时候, ...

  3. [转帖]自动交互式脚本--expect

    自动交互式脚本--expect https://www.cnblogs.com/zhuiluoyu/p/4873869.html 我们经常会遇到一些需要与服务器程序打交道的场景,比如,从登陆某个服务器 ...

  4. Linux远程ssh执行命令expect使用及几种方法

    expect命令实现脚本免交互 一.Linux下SSH无密码认证远程执行命令 在客户端使用ssh-keygen生成密钥对,然后把公钥复制到服务端(authorized_keys). 实现步骤: 1.客 ...

  5. python 交互式命令行数据库连接助手 -- mysql、sql server (mssql)、redis

    目录 python 交互式命令行数据库连接助手 0. 操作示例 1. python 连接mssql 2. python 连接mysql 3. python 连接redis n. Tips python ...

  6. Gitbash如何支持交互式命令?如何让gitbash的命令不乱码?winpty是什么鬼?干嘛用的?

    winpty 是一个 Windows 软件包,提供了类似 Unix pty-master 一样的接口,用于实现控制台程序之间的通讯.该软件包包括一个开发库 (libwinpty) 和一个用于 ygwi ...

  7. Spark-Unit2-Spark交互式命令行与SparkWordCount

    一.Spark交互式命令行 启动脚本:spark-shell 先启动spark:./start-all.sh 本地模式启动命令:/bin/spark-shell 集群模式启动命令:/bin/spark ...

  8. 解决php的交互式命令行不能正常启动的问题兼介绍psysh

    今天在自己的mac电脑上试着启动php的交互式命令行,发现敲下命令后一直卡在提示进入的地方,但没有出现已经进入的提示符,百度了下应该是与readline有关. 于是安装php的readline扩展,在 ...

  9. 自动交互式脚本--expect

    我们经常会遇到一些需要与服务器程序打交道的场景,比如,从登陆某个服务器,然后进行某项工作.这很平常,但是如果把这个工作自动化进行,你就需要一个程序能自动做你要告诉机器的事情,这样,我们的expect就 ...

随机推荐

  1. 用链表实现栈----《数据结构与算法分析----C语言描述》

    一.头文件: #ifndef _STACK_LINK_H_ #define _STACK_LINK_H_ struct stack_record; typedef struct stack_recor ...

  2. Algorithm Part I:Priority Queues

    1.binary heap实现 BinaryHeap.h #ifndef BINARYHEAP_H #define BINARYHEAP_H class BinaryHeap { public: Bi ...

  3. PHPDocumentor代码注释规范说明

       PHPDocumentor是一个的用PHP写的道具,对于有规则注释的php程序,它能够快速生成具有相互参照,索引等功能的API文档. 标记 用途 描述 @abstract   抽象类的变量和方法 ...

  4. DOM解析XML文件实例

    XML文件: response: <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www ...

  5. Java虚拟机几个命令行参数说明

    一.运行class文件 执行带main方法的class文件,Java虚拟机命令参数行为: java <CLASS文件名> 注意:CLASS文件名不要带文件后缀.class 例如: java ...

  6. android uiautomator自己主动化測试

    前提是自己电脑上配置好JDK,android和ant的环境 1.命令行下进入\Android-sdk\tools\文件夹下,执行命令:    android list    查看相应android版本 ...

  7. Android系统各版本号及代号

    Android系统各版本号及代号 版本 版本号代号 公布日期 API Android 1.0 阿童木 1 Android 1.1 发条机器人 2008.9 2 Android 1.5 纸杯蛋糕 200 ...

  8. HTTP/1.1

    HTTP真的很简单   原文:HTTP Made Really Easy因为我本身网络基础就很差,所以看到这篇文章一方面是学习网络知识,另一方面为了锻炼我蹩脚的英语水平,文中如有错误,欢迎浏览指正! ...

  9. Java EE (3) -- Java EE 6 Web Services Developer Certified Expert(1z0-897)

    Create an SOAP web service in a servlet container Create a RESTful web service in a servlet containe ...

  10. VMware vSphere 服务器虚拟化之十七 桌面虚拟化之安装View链接服务器

    VMware vSphere 服务器虚拟化之十七 桌面虚拟化之安装View链接服务器 View链接服务器(View Connection Server)是Vmware Horizon View桌面虚拟 ...