如何编写无须人工干预的shell脚本
在使用基本的一些shell命令时,机器需要与人进行互动来确定命令的执行。比如 cp test.txt boo/test.txt,会询问是否覆盖?ssh远程登陆时,需要输入人工密码后,才可以继续执行ssh命令等等。如何编写可以自动与shell交互的命令行,而不再需要人工介入呢?expect于此横空出世。
“Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don Libes在1990年 开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自动交互功能的软件套件 (Expect [is a] software suite for automating interactive tools)。使用它系统管理员 的可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端(terminal)得到输入,一般来说这些输入都需要手工输入进行的。”
下面我们安装下expect,并做简单的测试,确保正确使用expect脚本。Expect需要Tcl编程语言的支持,要在系统上运行Expect必须首先安装Tcl。
expect下载地址
http://download.chinaunix.net/download/0003000/2845.shtml
tcl下载地址
http://download.chinaunix.net/download/0001000/22.shtml
1。先安装tcl
进入tcl解压目录,然后进入unix目录
#./configure
#make
#make install
2.后安装expect
进入expect解压目录
#./configure --with-tclinclude=/usr/src/tcl8.4.19/generic/ --with-tclconfig=/usr/local/lib/
#make
#make install
完成,测试
#expect
expect1.1>
expect1.1>
一切OK,安装成功。
编写一个测试脚本,测试expect按正常运行。touch test.exp,文件以exp结尾或tcl结尾,都可以执行。注【spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命 令的。】
###author:usgrouping@weixin
#!/usr/local/bin/expect
set timeout 30
set password zhishi2016&*!db1
spawn ssh -l root 118.76.22.83 -p 14010
expect "*assword:" { send "$password\n"}
expect "*#"
send "echo success,we get into the remote directory!\r"
expect "100%"
expect eof
interact
保存后,运行expect test.exp,成功后输出:success,we get into the remote directory!
expect先介绍到这里,深入了解可翻阅网络相关资料。
上篇《利用jenkins实现自动构建、部署,提升团队开发效率》,自动构建后部署到应用服务器,是结合shell脚本完成的部署升级。环境是jenkins部署在内网,脚本执行也是内网。下篇内容将利用jenkins+shell+expect脚本的方式来部署线上环境,敬请关注......
【一位十年码农的碎碎念,扫码关注获取更多精彩内容】
原创文章,转载请注明出处,更多文章请关注公众号。
如何编写无须人工干预的shell脚本的更多相关文章
- 如何在linux下编写一个简单的Shell脚本程序
在了解了linux终端和其搭配的基本Shell(默认为bash)的基础下,我们就可以在终端中用vi/vim编辑器编写一个shell的脚本程序了 Shell既为一种命令解释解释工具,又是一种脚本编程语言 ...
- 使用redis4.0.1和redis-cluster搭建集群并编写重启shell脚本
1.删除机器上原有的redis2.8 关闭redis-server killall -9 redis-server 查找redis文件所在目录 which redis 删除相关文件 rm -rf re ...
- 使用C#给Linux写Shell脚本
在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...
- shell脚本每天自动备份mysql数据库
一.mysql提供了一个mysqldump的工具可以方便的导出导入数据库信息: 二.使用命令行shell测试执行mysqldump,理解必备的参数,查看生成的sql备份文件是否符合需求: /usr/b ...
- 将PHP作为Shell脚本语言使用
我们都知道.PHP是一种非常好的动态网页开发语言(速度飞快.开发周期短--).可是仅仅有非常少数的人意识到PHP也能够非常好的作为编写Shell脚本的语言,当PHP作为编写Shell脚本的语言时,他并 ...
- 转 shell脚本学习指南
shell脚本学习指南 以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题 ...
- Java面试12|Linux及Shell脚本
1. 随便写一个awk的命令.用awk统计文本行数 (1)最近登录的5个帐号 last -n 5 | awk -F ':'(指定域分割符号) '{print $1}' 读入有'\n'换行符分割的一条记 ...
- Linux Shell脚本编程
⒈为什么要学习Shell编程 1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理 2)对于JavaEE和Python程序员来说,有些工作需要编写一些Shell脚本进 ...
- 使用shell脚本来自动化处理我们的工作,解放双手
Shell脚本介绍 1.Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. 2.Shell可以直接使用在wi ...
随机推荐
- Python写的嗅探器——Pyside,Scapy
使用Python的Pyside和Scapy写的嗅探器原型,拥有基本框架,但是功能并不十分完善,供参考. import sys import time import binascii from PySi ...
- Qt PNG 背景透明
本文主要是解决Qt中QGraphicsAbstractShapeItem,QPixmap,QPainter等组件的透明化显示问题. 在Qt中定义了一个常量,用于设置透明的颜色,即Qt::transpa ...
- 在DELPHI中*.wav 文件怎么加到资源文件中
比较“流行”的说法是:“16位的Delphi 1.0和32位的Delphi2.0.3.0都提供了资源 编译工具,其中 Delphi 1.0的资源编译器叫BRCC.EXE,D ...
- 编解码TIFF图像
解码: // Open a Stream and decode a TIFF image Stream imageStreamSource = new FileStream("tulipfa ...
- 【备忘】C#语言基础-1
C#基础 注意区别哟! C#是一种托管语言,与C++不同,不能直接操作系统底层,依赖于 framework. 如果局部变量和全局变量同名,全局变量就会被屏蔽. 函数的返回值类型不是签名的一部分,所以不 ...
- DELPHI美化界面(2009开始TPanel增加了ParentBackGround)
1.透明问题. 要重新调整界面确实很麻烦,以前用DELPHI开发的界面都很土,和WEB真是没办法比.(我以前用的是DELPHI7),现在回想起来,DELPHI难做的原因是:没有透明控件.所有控件都是不 ...
- 使用MSYS2环境中编译Qt5.5.0的补丁
Qt的configure脚本对MinGW静态编译支持不太完善,总有这样那样的问题.如果你不嫌麻烦,而且可以接受高版本的Qt的话,可以考虑使用我做的补丁在MSYS2环境中编译.Qt5.4.2的补丁 Qt ...
- web开发常用正则表达式
整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$".只能输入至少n位的数 ...
- Linux中$的特殊用法
一:变量说明:($表示在执行命令的一些参数) (!) $! #Shell最后运行的后台Process的PID (2) $? #最后运行的命令的结束代码(返回值) ...
- Nginx多种负载均衡策略搭建
背景介绍 上篇介绍了利用Nginx反向代理实现负载均衡,本文详细讲述Nginx下的几种负载均衡策略. 轮询 轮询,顾名思义,就是轮流请求,基于上篇文章的介绍,我们将负载均衡策略聚焦于default.c ...