expect语法

简介

expect主要解决shell脚本中不可交互的问题,使用expect能用非交互方式完成交互问题,比如:ssh自动登录。
expect用的是tcl语法,不是shell语法。

安装

linux安装:

yum install expect -y

注: mac自带expect工具。

常用命令

  1. 设置超时
set timeout 30  # 单位:秒 (-1为永不超时)
  1. spawn命令:激活一个Unix程序来进行交互式的运行。
spawn ssh -l username 192.168.1.1
  1. send命令:向进程发送字符串,模拟用户的输入,不能自动回车换行,一般要加 \n\r
  2. expect命令:捕捉spawn进程输出是否包含指定字符串,有则立即返回,或超时返回
    注: expect支持匹配模式。
#当进程输出AAA,则发送aaa并回车。
expect "AAA" {send "aaa\r"}
  1. 脚本结尾:
    interact:执行完成后保持交互状态,把控制权交给控制台
    expect eof:执行完结束进程
interact
expect eof

exp_continue:允许expect继续向下执行指令

# expect只要匹配了aaa 或bbb或ccc中的任何一个,便退出此expect语句
expect { 
"aaa" {send "AAA\r"}
"bbb" {send "BBB\r"}
"ccc" {send "CCC\r"}
}

# exp_continue 用法
expect {
"aaa" {send "AAA\r";exp_continue} # expect匹配完“aaa”,会继续往下匹配;
"bbb" {send "BBB\r";exp_continue}
"ccc" {send "CCC\r"}
}
  1. 输入:$argv参数数组。
set hostname [lindex $argv 0] 
# 变量定义 接收bash传入的第一个参数赋值给hostname变量
# [lindex $argv 0] 表示第一个参数, 
# [lindex $argv 1] 表示第二个参数, 。。。
  1. 输出:putssend_user ,相当于echo。
# 输出hostname变量
puts $hostname 
send_user $hostname

:大部分时候puts和send_user可以互相取代,只要注意其中的不同即可。

相关阅读

https://blog.csdn.net/CN_TangZheng/article/details/103388445
https://blog.csdn.net/daihaoxin/article/details/106014683
https://www.phpernote.com/linux/1479.html
https://blog.csdn.net/qq_36748278/article/details/84399416

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值