expect的使用

2 篇文章 0 订阅

1、expect简介

expect是一款自动化的脚本解释型的工具。

expect基于tcl脚本,expect脚本的运行需要tcl的支持。

expect对一些需要交互输入的命令很有帮助,比如ssh ftp scp telnet。

远程登录linux服务器的时候,ssh命令需要手工输入密码,当登录多台机器的时候就会非常繁琐。

expect就可以根据设定的规则,自动帮我们输入密码,大大节省了时间。

2、安装

yum install expect -y

3、常用命令

spawn 新建一个进程,这个进程的交互由expect控制
expect 等待接受进程返回的字符串,直到超时时间,根据规则决定下一步操作
send 发送字符串给expect控制的进程
set 设定变量为某个值
exp_continue 重新执行expect命令分支
[lindex $argv 0] 获取expect脚本的第1个参数
[lindex $argv 1] 获取expect脚本的第2个参数
set timeout -1 设置超时方式为永远等待
set timeout 30 设置超时时间为30秒
interact 将脚本的控制权交给用户,用户可继续输入命令
expect eof 等待spawn进程结束后退出信号eof

4、用法

单一分支

set password 123456
expect "*assword:" { send "$password\r" }

多分支模式写法

set password 123456
expect {
      "(yes/no)?" { send "yes\r"; exp_continue }
      "*assword:" { send "$password\r" }
}

4、使用例子

#!/bin/bash
#同步原gitlab xx组下的project到新的gitlab
#author menard

cd /root/project
project=('project1' 'project2' 'project3')
for i in ${project[*]}
do
	/usr/bin/expect <<EOF
        set timeout -1
	spawn git clone http://172.16.9.66/DOC_NBO/$i.git
		expect {
				"*Username*" {send "code_ops\r"}
		}
		expect {
				"Password*" {send "password\r"} 
		}
	expect eof
EOF
sleep 3
	cd $i
	git remote rm origin
	git remote add origin http://gitlab-code.xxx.com.cn/doc/$i.git
	/usr/bin/expect <<EOF
        set timeout -1
    spawn git push -u origin --all
		expect {
				"*Username*" {send "code_ops\r"}
		}
		expect {
				"Password*" {send "password\r"} 
		}
    expect eof
EOF
sleep 3
    /usr/bin/expect <<EOF
    set timeout -1
    spawn git push origin --tags
		expect {
				"*Username*" {send "code_ops\r"}
		}
		expect {
				"Password*" {send "password\r"} 
		}
    expect eof
EOF
  
	cd /root/project
        sleep 1
done

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Menardღ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值