expect

Linux expect详解

有些话、适合烂在心里 提交于 2020-03-20 11:33:06
场景 现在有两台Linux主机A和B,如何从A主机ssh到B主机,然后在B主机上执行命令,如何使这个过程实现全程自动化?你可能会使用这种方法: ssh admin@10.220.20.15 "ls" 但是这种方式比较笨拙,每次都要输入密码,同时并不能执行一些复杂的逻辑或命令。那么如何实现全程自动化呢?这就要用到今天这篇文章总结的expect了。 expect是什么? expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。说白了,expect就是一套用来实现自动交互功能的软件。 在实际工作中,我们运行命令、脚本或程序时,这些命令、脚本或程序都需要从终端输入某些继续运行的指令,而这些输入都需要人为的手工进行。而利用expect,则可以根据程序的提示,模拟标准输入提供给程序,从而实现自动化交互执行。这就是expect!!! expect基础 在使用expect时,基本上都是和以下四个命令打交道: 命令 作用 send 用于向进程发送字符串 expect 从进程接收字符串 spawn 启动新的进程 interact 允许用户交互 send 命令接收一个字符串参数,并将该参数发送到进程。 expect 命令和send命令相反,expect通常用来等待一个进程的反馈,我们根据进程的反馈,再发送对应的交互命令。 spawn 命令用来启动新的进程

linux下expect安装

為{幸葍}努か 提交于 2020-03-11 04:29:15
expect据说是交互性很强的脚本语言,想安装了玩玩试试,没想到竟然让我纠结两天才安装上,只是因为expect依赖于tcl,但linux系统里一般不自带安装tcl,需要手动安装 expect版本 5.43 http://download.chinaunix.net/download/0003000/2845.shtml tcl版本 8.4.19 http://sourceforge.net/projects/tcl/files/Tcl/8.4.19/tcl8.4.19-src.tar.gz/download 下载两个包,分别解压 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 来源: https://www.cnblogs.com/evilloop/archive/2011/09/23/2185950

[Linux] expect用法举例

冷暖自知 提交于 2020-03-07 05:07:30
expect有助于自动化脚本中的交互过程的自动输入,例如远程登录需要输入确认信息、密码,安装脚本需要输入确认信息、用户名、密码、选择配置选项等等。 expect内部命令中的expect可以匹配一个给定的字符串,匹配上了可以再使用send命令返回一个字符串。 [例1] 使用"-c"选项,从命令行执行expect脚本 [root@xxx test]# expect -c 'expect "\n" {send "pressed enter\n"}' pressed enter [root@xxx test]# [root@xxx test]# expect -c 'expect "hi" {send "You said hi\n"}' hi You said hi [root@xxx test]# expect -c 'expect "hi" {send "You said hi\n"}' high You said hi [root@xxx test]# 再看一个ssh登录的例子, [例2-1] ssh登录主机,test.exp内容如下(主机名和密码写在脚本中,执行完成后退出) #!/usr/bin/expect set ipaddr "localhost" set passwd "iampasswd" spawn ssh root@$ipaddr expect { "yes/no"

(java并发)CAS操作原理以及Atomic的原理

心已入冬 提交于 2020-02-28 21:05:17
CAS操作可以分为以下三个步骤: 步骤 1. 读旧值(即从系统内存中读取所要使用的变量的值,例如:读取变量i的值) 步骤2. 求新值(即对从内存中读取的值进行操作,但是操作后不修改内存中变量的值,例如:i=i+1,这一步只进行 i+1,没有赋值,不对内存中的i进行修改) 步骤3. 两个不可分割的原子操作 第一步: 比较内存中变量现在的值与 最开始读的旧值是否相同(即从内存中重新读取i的值,与一开始读取的 i进行比较) 第二步: 如果这两个值相同的话,则将求得的新值写入内存中(即:i=i+1,更改内存中的i的值) 如果这两个值不相同的话,则重复步骤1开始 注:这两个操作是不可分割的原子操作,必须两个同时完成 CAS操作 CAS是单词compare and set的缩写,意思是指在set之前先比较该值有没有变化,只有在没变的情况下才对其赋值。 我们常常做这样的操作 if(a==b) { a++; } 试想一下如果在做a++之前a的值被改变了怎么办?a++还执行吗?出现该问题的原因是在多线程环境下,a的值处于一种不定的状态。采用锁可以解决此类问题,但CAS也可以解决,而且可以不加锁。 int expect = a; if(a.compareAndSet(expect,a+1)) { doSomeThing1(); } else { doSomeThing2(); }

chai断言的学习总结

非 Y 不嫁゛ 提交于 2020-02-26 14:51:23
chai API 新手指南 带着几个问题去学习? 什么是TDD 和BDD 有几种常用的断言方式 chai断言方式使用方法 它们的区别是什么 TDD和BDD是什么? TDD:测试驱动开发(Test-Driven Development)测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD的基本思路就是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。TDD首先考虑使用需求(对象、功能、过程、接口等),主要是编写测试用例框架对功能的过程和接口进行设计,而测试框架可以持续进行验证。 BDD:行为驱动开发(Behavior Driven Development)行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。主要是从用户的需求出发,强调系统行为。BDD最初是由Dan North在2003年命名,它包括验收测试和客户测试驱动等的极限编程的实践,作为对测试驱动开发的回应。 有几种断言方式 有三种常用的方式:assert|expect|should chai断言方式使用方法 声明 var chai = require('chai'); var assert = chai

Shell编程之嵌套循环

主宰稳场 提交于 2020-02-26 01:20:29
一、随机数 1.如何生成随机数? 2.实战案例 1)随机产生以139开头的电话号码 2)随机抽出5位幸运观众 3)批量创建用户(密码随机产生) 二、嵌套循环 1.应用案例 1)打印指定图案 2)落地实现1 3)落地实现2 三、阶段性补充总结 1.影响shell程序的内置命令 四、综合案例 1.实战案例1 1)具体需求 2)案例分析 3)落地实现 实战案例2 一、随机数 1. 如何生成随机数? 系统变量 : ==RANDOM== ,默认会产生0~32767的随机整数 前言: 要想调用变量,不管你是什么变量都要给钱,而且是美元:heavy_dollar_sign: 打印一个随机数 echo $RANDOM 查看系统上一次生成的随机数 # set|grep RANDOM RANDOM=28325 产生0~1之间的随机数 echo $[$RANDOM%2] 产生0~2之间的随机数 echo $[$RANDOM%3] 产生0~3之间的随机数 echo $[$RANDOM%4] 产生0~9内的随机数 echo $[$RANDOM%10] 产生0~100内的随机数 echo $[$RANDOM%101] 产生50-100之内的随机数 echo $[$RANDOM%51+50] 产生三位数的随机数 echo $[$RANDOM%900+100] 2. 实战案例 1)随机产生以139开头的电话号码

连接远程主机

走远了吗. 提交于 2020-02-23 00:17:48
连接远程主机 做法:通过ssh来连接远程主机,然后通过expect来发送密码,登陆主机以后再发送需要执行的命令来设置ss。为了避免出现超时,所以需要设置一个超时时间; 代码如下: #!/usr/bin/expect set user root set host yourip set password yourpass spawn ssh $user@$host set timeout 20 expect "*assword:*" set timeout 20 send "$password\r" expect "root@vultr:" send "ssserver -c /etc/shadowsocks.json\r" interact expect eof 接下来可以设置一个别名,这样就不用每次都输入路径了, 直接输入别名即可。 alias ssh_login="shell's path" 来源: https://www.cnblogs.com/George1994/p/7673709.html

centos7如何安装zabbix

跟風遠走 提交于 2020-02-23 00:10:13
只需要按照第三次修改版本的内容安装就可以了(水平线内的内容),主要是执行两个脚本就可以完成自动化安装了,其他内容是以前写的,仅留下来作为参考 第三次修改:(此次为zabbix4.0版本的,进一步的自动化一键安装) 共有两个脚本 第一个脚本:mysqlpasswd.sh(放在root家目录下)修改mysql密码的脚本,无需执行 #!/usr/bin/expect spawn mysql_secure_installation expect "Enter current password for root (enter for none):" send "\r" expect "Set root password? " send "Y\r" expect "New password:" send "123456\r" expect "Re-enter new password:" send "123456\r" expect "Remove anonymous users? " send "y\r" expect "Disallow root login remotely? " send "n\r" expect "Remove test database and access to it? " send "y\r" expect "Reload privilege tables

linux expect spawn的用法

强颜欢笑 提交于 2020-02-20 18:11:36
expect介绍 借助Expect处理交互的命令,可以将交互 过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成.尤其适用于需 要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率 expect安装 [root@docker-01 ~]# yum -y install expect expect 语法 expect [选项] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ] 选项 -c:从命令行执行expect脚本,默认expect是交互地执行的 示例:expect -c 'expect "\n" {send "pressed enter\n"} -d:可以输出输出调试信息 示例:expect -d ssh.exp expect中相关命令 spawn:启动新的进程 send:用于向进程发送字符串 expect:从进程接收字符串 interact:允许用户交互 exp_continue 匹配多个字符串在执行动作后加此命令 expect最常用的语法(tcl语言:模式-动作) 单一分支模式语法: expect “hi” {send “You said hi\n"} 匹配到hi后,会输出“you said hi”,并换行 多分支模式语法: expect "hi" { send "You said hi\n" } \

expect构建文件分发系统

随声附和 提交于 2020-02-14 01:23:43
  expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令。当然若是使用不带密码的密钥验证同样可以实现自动登录和自动远程执行命令。但当不能使用密钥验证的时候,我们就没有办法了。所以,这时候只要知道对方机器的账号和密码就可以通过expect脚本实现登录和远程命令。  分发准备:模板脚本、服务器ip、用户名、密码、expect脚本 yum install -y expect expect脚本登录机器: vim 1.expect #!/usr/bin/expect set host "192.168.133.132" #连接到主机 set passwd "123456" #密码 spawn ssh root@$host #spawn调用shell命令ssh(登录),“set host”和“set passwd”为expect定义的两个变量 expect { "yes/no" { send "yes\r"; exp_continue} #ssh首次远程登录一台主机是会提示yes/no,吧yes发送过去;"\r“表示回车 "password:" { send "$passwd\r" } #如果提示passwd需要把密码发送过去,用户交互,"\r“表示回车 } interact #interact的作用是停留在远程机器上,不退出 #脚本结束符号:expect eof—