expect完成Linux上的重复性工作

后端开发中会经常使用一些重复性的命令,比如项目部署,文件同步等,每次都要执行一堆相同的命令,这些重复性的工作完全可以用脚本来代替。

expect是基于TCL的相对简单的一个免费的脚本编程工具语言,用来实现自动和交互式任务程序语言进行通信,无需人工干预。

一般expect的工作流程是:spawn启动进程 --> expect期待关键字 --> send向进程发送字符 --> 退出结束。

首先安装expect:

sudo apt install expect

举个栗子: 

#! /usr/bin/expect
set timeout -1  # 设置超时时间
set src [lindex $argv 0]  # 获取输入参数
spawn rsync -av [email protected]:$src /mnt/hgfs/e/Downloads/rsync  # 开启一个进程执行rsync语句
expect "[email protected]"   # expect匹配rsync的返回结果
send "xxxxxx\r"  # 匹配到expect就执行发送动作,相当于交互下的输入密码,\r为输入密码后回车
expect eof  # 匹配结束符
exit  # 退出

常用命令:

# 命令行参数
# $argv,参数数组,使用[lindex $argv n]获取,$argv 0为脚本名字
# $argc,参数个数
set username [lindex $argv 1]   # 获取第1个参数
set passwd [lindex $argv 2]     # 获取第2个参数

set timeout 30                 # 设置超时

# spawn是expect内部命令,开启ssh连接
spawn ssh -l username 192.168.1.1

# 判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间(timeout)后返回
expect "password:"

# 发送内容ispass(密码、命令等)
send "ispass\r"

# 发送内容给用户,就是会显示在终端
send_user "$argv0 [lrange $argv 0 2]\n"
send_user "It's OK\r"

# 执行完成后保持交互状态,控制权交给控制台(手工操作)。否则会完成后会退出。
interact

 

你可能感兴趣的:(Linux)