文档章节

Linux交互命令工具expect与自动切换登录用户

YuanyuanL
 YuanyuanL
发布于 2016/12/07 10:25
字数 1143
阅读 238
收藏 0

linux expect 安装 Expect是在Tcl基础上创建起来的,它还提供了一些Tcl所没有的命令,它可以用来做一些linux下无法做到交互的一些命令操作,在远程管 理方面发挥很大的作用。 spawn命令激活一个Unix程序来进行交互式的运行。  send命令向进程发送字符串。 expect 命令等待进程的某些字符串。  expect支持正规表达式并能同时等待多个字符串,并对每一个字符串执行不同的操作.

A. Tcl 安装 
主页: http://www.tcl.tk
下载地址: http://www.tcl.tk/software/tcltk/downloadnow84.tml

1.下载源码包
wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.11-src.tar.gz

2.解压缩源码包
tar xfvz tcl8.4.11-src.tar.gz

3.安装配置
cd tcl8.4.11/unix
./configure --prefix=/usr/tcl --enable-shared
make
make install

安装完毕以后,进入tcl源代码的根目录,把子目录unix下面的tclUnixPort.h copy到子目录generic中。 暂时不要删除tcl源代码,因为expect的安装过程还需要用。

B. expect 安装 (需Tcl的库)
主页: http://expect.nist.gov/
1.下载源码包
wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download

2.解压缩源码包
tar xzvf expect5.45.tar.gz

3.安装配置
cd expect5.45
./configure --prefix=/usr/expect --with-tcl=/usr/tcl/lib --with-tclinclude=../tcl8.4.11/generic
make
make install
ln -s /usr/tcl/bin/expect /usr/expect/bin/expect

自动切换登陆用户的脚本与执行 如何能够将输入密码的工作在shell里面自动完成,研究发现这种交互式的工作,普通的shell实现不了,据说可以借助expect来搞定:

例子:

实现从普通用户“test”切换到root用户,自动输入root的密码,不用在终端提示符下执行密码输入操作。
步骤:
(1)创建并打开脚本文件
vi autosu.sh   

(2)编辑脚本内容
#!    /usr/expect/bin/expect     -f        //指定expect工具的路径,如果不清楚具体路径,可以用"which expect"命令来查看。
spawn    su   -                                //  在expect 中用"spawn"关键字来调用命令“su - ” 
expect     ":"                                      //在执行了su   -  命令之后,提示输入密码的提示符。例如你在执行了su - 命令之后,终端里面会出现提示“口令:”,那么你就可以在这里写expect    ":",或者expect    -exact    "口令:"
send     "rootpasswd/r"                    //这里expect用send将你的root密码自动输入到上面的提示符之后。
interact     
                                       //操作完成。
  (3)执行脚本文件
./autosu.sh
注意:执行脚本时要注意的地方,不能按照习惯来用sh **.sh来这个expect的程序,会提示找不到命令,因为expect用的不是bash所以会报错。执行的时候直接./**.sh就可以了。

Linux Expect命令详解:

http://www.xuetimes.com/archives/781 http://www.tuicool.com/articles/63iy2m

Linux/Unix 程序退出状态详解:

http://blog.csdn.net/Hadas_Wang/article/details/43601981?locationNum=2

附注:

对于 *NIX 系统而言,每一条命令,不管是内置的,SHELL 函数还是外置的,当它退出时,都 会返回一个小整数给引用它的程序,这就是程序退出状态 ( exit status ).

一般来讲,退出状态 0 表示正常执行,没有遭遇任何问题。其他非零的状态码均表示失败。

在 shell 中,可以使用 $? 来访问最后一个程序的退出状态。

下面是 POSIX 的结束状态:

退出状态码	含义
0	        命令成功退出
> 0	        在重定向或者单词展开期间(~、变量、命令、算术展开以及单词切割)失败。
1 – 125	命令不成功退出。特定的退出值的含义,有各个命令自行定义。
126	        命令找到了,但是文件无法执行。
127	        命令没有找到
> 128	命令因收到信号而死亡。
POSIX 没有定义 128 的状态码,仅要求它表示某种错误。因为只有低位的 8 个位会返回给父进程,因此,所有大于 255 的退出状态都会被对 256 取模,然后将其结果作为实际的 exit status code.

在 shell 脚本中,可以使用 exit integer_value 这种方式声明退出状态。如果没有显式地声明,则会以最后一个程序的退出状态作为当前脚本的退出状态。也可以使用 exit $? 来表示。

Expect 的默认Exit value为0: exit 等价于 exit 0 因此,当expect中执行了子命令时(如shell命令),要想在expect退出时得到子命令的退出状态,就需要再Exepect退出时对exit value重新赋值。

赋值方法:待续。。

© 著作权归作者所有

共有 人打赏支持
YuanyuanL

YuanyuanL

粉丝 152
博文 322
码字总数 188376
作品 0
济南
部门经理
私信 提问
教会你Linux Shell自动交互的三种方法

你了解Linux系统么?你是Linux系统的应用者么?如果你要学习linux,你可能会遇到Linux Shell自动交互问题,这里将介绍Linux Shell自动交互的解决方法,在这里拿出来和大家分享一下。 一、背景...

魏邪乎
2014/02/13
0
0
[linux comm]expect

Expect是一个用来处理交互的命令。借助Expect,我们可以将交互过程写在一个脚本上,使之自动化完成。形象的说,ssh登录,ftp登录等都符合交互的定义。下文我们首先提出一个问题,然后介绍基础...

SibylY
2015/03/04
0
0
Linux expect 用法

用法 1. [#!/usr/bin/expect] 这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和Linux下的bash、windows下的cmd是一类东西。 注意:这一行需要在脚本的第一行。 ...

leonardos
07/02
0
0
linux expect详解(ssh自动登录)

shell脚本实现ssh自动登录远程服务器示例: #!/usr/bin/expectspawn ssh root@192.168.22.194expect "password:"send "123r"expect "#"interact Expect是一个用来处理交互的命令。借助Expect,...

独钓渔
2016/03/31
26
0
linux 远程自动化部署

#!/usr/bin/expect -f set timeout 60set f [open ./ip r]while { [gets $f line ] >=0 } { set ip [lindex $line 0] #echo "开始启动$ip的服务" spawn scp push.war jeeker@$ip:/home/jeeke......

kongjun
2016/01/08
698
2

没有更多内容

加载失败,请刷新页面

加载更多

结合Spring和Groovy解决脚本热加载

前言 去年写过一篇文件介绍了采用jpython解决动态配置热加载的问题jpython解决热加载,今年在实现规则引擎过程中准备进行升级,采用groovy脚本解决。 方案 将一些规则相关,如统计,排序,过...

春哥大魔王的博客
13分钟前
1
0
以太坊应用开发接口:JSON RPC API

以太坊应用开发接口指的是以太坊节点软件提供的API接口,去中心化应用可以利用这个接口访问以太坊上的智能合约。以太坊应用开发接口采用JSON-PRC标准,通常是通过HTTP或websocket提供给应用程...

汇智网教程
17分钟前
1
0
排序--二分插入排序

二分插入排序是对直接插入排序的一个优化,在排序--直接插入排序中已经分析过直接插入排序的最坏时间复杂度是平方级别的,二分插入排序则是通过二分查找对寻找插入位置进行了优化,在找到插入...

FAT_mt
28分钟前
3
0
Quora点赞过万!麻省理工5.0GPA十条学习技巧

美国版知乎Quora上有个问题是:顶尖学生如何学习。排名第一的答案已经赢得13.5K次点赞,我们翻译出来分享给大家。 MIT normally does not rank its students. So if you hear that someone g...

乔老哥
41分钟前
1
0
IOC的学习(1)

1.IOC理论概要 java中,一个对象A怎么才能调用对象B? 当一个对象的构建,需要多个其他对象时,对象和对象有复杂的构建关系。spring帮助我们维系对象的依赖关系,降低系统的实现成本,前提是...

杨健-YJ
53分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部