linux 脚本 expected,Linux | shell与expect结合使用

在linux操作系统下,使用脚本自动化,一般由两种方案。

方案一:telnet+ftp

方案二:ssh+scp+expect。

以下主要使用ssh+scp+expect为例进行说明使用方式。

第一步:安装expect:yum -y install expect

第二步:验证,执行expect是否正确

第三步:编写脚本ssh_exec(){

ip=$1

user=$2

passwd=$3

cmdstr=$4

/usr/bin/expect <

set time 10

spawn ssh $user@$1

expect {

"*yes/no" { send "yes\r"; exp_continue}

"*password:" {send "$passwd\r"}

}

expect "*#"

expect "*#"

send "$cmdstr\r"

expect "*#"

send "exit\r"

expect eof

EOF

}

function scp_get () {

local ip=$1

local user=$2

local passwd=$3

local src=$4

local dst=$5

[ -z "$ip" -o -z "$passwd" ] && return 1

/usr/bin/expect << EOF

proc remote_exec {ip passwd src dst} {

spawn scp \$user@\$ip:\$src \$dst

exp_internal 0

expect {

"yes/no" { send "yes\\r";exp_continue}

"*password:" {send "\$passwd\\r"}

}

expect eof

}

remote_exec "$ip" "$user" "$passwd" "$src" "$dst"

EOF

}

#从本地服务器复制到远程服务器

function scp_put () {

local ip=$1

local user=$2

local passwd=$3

local localfile=$4

local dst=$5

[ -z "$ip" -o -z "$passwd" ] && return 1

/usr/bin/expect << EOF

proc remote_exec {ip passwd localfile dst} {

spawn scp \$localfile \$user@\$ip:\$dst

exp_internal 0

expect {

"yes/no" { send "yes\\r";exp_continue}

"*password:" {send "\$passwd\\r"}

}

expect eof

}

remote_exec "$ip" "$user" "$passwd" "$localfile" "$dst"

EOF

}

ssh_exec 192.168.1.2 root 111111 'df -h'

scp_get 192.168.1.2 root 111111 '/root/test.txt' '/opt/'

代码说明:

第四步:对脚本授权,执行:chmod -R 755 script.sh

第五步:脚本执行,./script.sh  (备注:shell+expect脚本,不能使用sh script.sh执行,只能采用./script.sh执行)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Swift]LeetCode246.对称数 $ Strobogrammatic Number

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/&#xff09;➤GitHub地址&a…

C++中父类的虚函数必需要实现吗?

一、情景 C中父类的虚函数必需要实现吗&#xff1f; class Vir{ public:virtual void tryVirtual(); };class CVir:public Vir{ public:void tryVirtual(){std::cout<<"CVir"<<std::endl;} };二、说明 &#xff08;1&#xff09;在main函数中&#xff0c…

解决新浪微博API调用限制 突破rate_limit_status瓶颈

新浪微博开放平台API的调用和TWITTER接口一样&#xff0c;都是受限的&#xff0c;以小时为单位进行限定。 他有两个限制原则 1.用户不登录基于IP的限制&#xff0c;每小时1000次 2.用户登录了基于用户的限制&#xff0c;每小时1000次 如果应用是用户不登录的那么就是对IP进行限…

chrome前端开发工具_精通Chrome开发人员工具:更高级别的前端开发技术

chrome前端开发工具by Ben Edelstein通过本爱德斯坦 You may already be familiar with the basic features of the Chrome Developer Tools: the DOM inspector, styles panel, and JavaScript console. But there are a number of lesser-known features that can dramatica…

linux给文件夹图标,linux – 如何在GNOME中以编程方式设置自定义文件夹图标?

我终于想出了如何做到这一点&#xff01;这是一个在标准Gnome环境中工作的Python脚本&#xff1a;#!/usr/bin/env pythonimport sysfrom gi.repository import Gioif len(sys.argv) not in (2, 3):print Usage: {} FOLDER [ICON].format(sys.argv[0])print Leave out ICON to u…

jQuery序列化表单为JSON对象

[html] view plaincopy <form id"myform"> <table> <tr> <td>姓名:</td> <td> <input type"text" name"name" /> </td> </tr> …

sys模块

与python解释器交互的模块 sys.argv 命令行参数List&#xff0c;第一个元素是程序本身路径 sys.exit(n) 退出程序&#xff0c;正常退出时exit(0),错误退出sys.exit(1) sys.version 获取Python解释程序的版本信息 sys.path 返回模块的搜索路径…

李开复:年轻人该比谁更拼命吗?

李开复:年轻人该比谁更拼命吗&#xff1f; IT职场 cricode 4个月前 (04-02) 951℃ 0评论 我年轻的时候是最不注重睡眠的&#xff0c;我记得在我读大学的时候每次要考试就因为平时玩耍太多了&#xff0c;每次要考试的时候就会灌咖啡&#xff0c;有时候一个晚上可以喝十杯咖啡不…

linux命令无视错误,llinux 的一些命令和错误

sudo tar -zxvf ./hadoop-2.6.0.tar.gz -C /usr/local # 解压到/usr/local中source ~/.bashrc # 使变量设置生效sudo useradd -m hadoop -s /bin/bash 创建新用户sudo adduser hadoop sudo 可为 hadoop 用户增加管理员权限sudo mv ./hadoop-2.6.0/ ./hadoop # 将文件…

假设检验方差未知_设计云数据库时如何处理未知数并做出假设

假设检验方差未知by Rick Mak麦瑞克(Rick Mak) 设计云数据库时如何处理未知数并做出假设 (How to handle unknowns and make assumptions when designing a cloud database) 场景&#xff1a;鞋盒还是社交应用&#xff1f; (Scenario: Shoebox or social app?) Say you’re a…

SQL校验优化

我的思路只能查当前的&#xff1a; ----校验此行订单是否已导入&#xff0c;若已导入则提示订单号并Return -- IF EXISTS (SELECT 1 FROM DOC_Order_Header b LEFT JOIN tblData a -- ON -- a.ConsigneeID b.Consig…

nat64 dns64 linux 内核支持,搭建NAT64/DNS6实现IPv4/v6转换

NAT64采用tayga实现&#xff0c;DNS64采用bind9.8实现。1 平台搭建平台为ubuntu12.04 Desktop版本。正常安装即可。2 NAT64(tayga)2.1 安装在终端模式下输入sudo apt-get install tayga2.2 配置2.2.1 相关设置sudo gedit /etc/tayga.conf按照说明配置&#xff0c;目前实现方案不…

React学习笔记(持续更新)

2.2页面加载过程 1.资源加载过程&#xff1a;URL->DNS查询->资源请求->浏览器解析 ①URL结构&#xff1a;http://www.hhh.com:80/getdata?pid1#title[协议://域名&#xff1a;端口/路径?参数#哈希] ②DNS查询&#xff1a;浏览器<--&#xff08;ip&#xff09;&am…

2年工作经验进 初创公司_沟通是关键:通过两家初创公司获得的成长经验教训+找工作...

2年工作经验进 初创公司by Niki Agrawal通过尼基阿格劳瓦尔(Niki Agrawal) 沟通是关键&#xff1a;通过两家初创公司获得的成长经验教训找工作 (Communication is key: growth lessons learned through two startups a job hunt) It’s been a crazy two years. I founded tw…

Hibernate问题浅析

1、什么是SessionFactory&#xff1f;什么是Session&#xff1f;httpsession和hibernate的session的有什么区别&#xff1f;SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理&#xff0c;并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactor…

Oracle中SQL语句学习五(统计分组语句group by和having)

oracle&#xff08;41&#xff09; 在 应用系统开发中&#xff0c;进行需要统计数据库中的数据&#xff0c;当执行数据统计时&#xff0c;需要将表中的数据进行分组显示&#xff0c;在统计分组中是通过group by子句、分组函数、having子句共同实现的。其中group by子句用于指定…

linux系统去吧,要开始另一个linux操作系统的尝试了,说说我以前的ubuntu吧

我想&#xff0c;除了尝试一下ubuntu的神奇魅力的同时&#xff0c;我应该去体验一下RedHat的神奇吧&#xff01;马上就要告别ubuntu了&#xff0c;我想把我的部分使用经历和大家分享分享&#xff01;首先&#xff0c;无论是ubuntu8.04、10.04还是10.1的效果都是很好的&#xff…

课程编码查询_付出还是不付出:生活中最好的事情(例如编码课程)是否免费?...

课程编码查询by Rick West由里克韦斯特(Rick West) 付出还是不付出&#xff1a;生活中最好的事情(例如编码课程)是否免费&#xff1f; (To pay or not to pay: are the best things in life — like coding courses — free?) Recently, I’ve been working on a project tha…

做开发十年,我总结出了这些开发经验

本文由云社区发表,原文转载地址:https://www.cnblogs.com/qcloud1001/p/10218876.html 在一线做了十年的开发&#xff0c;经历了网易、百度、腾讯研究院、MIG 等几个地方&#xff0c;陆续做过 3D 游戏、2D 页游、浏览器、移动端翻译 app 等。 积累了一些感悟。必然有依然幼稚的…

2016年4月 TIOBE 编程语言排行榜

4月头条: Visual Basic 正在渐行渐远 COBOL, BASIC 和 FORTRAN 很长一段时间作为主力开发语言被使用。有很多软件使用这些语言来编写&#xff0c;并且发展的不亦乐乎。然而经过多年的发展&#xff0c;COBOL和FORTRAN逐渐被抛弃&#xff0c;而得益于微软的存在&#xff0c;BASIC…