except命令的用法

expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。
expect自动交互流程:
spawn启动指定进程---expect获取指定关键字---send向指定程序发送指定字符---执行完成退出.

yum install -y expect # 安装expect


expect常用命令总结:
spawn 交互程序开始后面跟命令或者指定程序
expect 获取匹配信息匹配成功则执行expect后面的程序动作
send exp_send 用于发送指定的字符串信息
exp_continue 在expect中多次匹配就需要用到
send_user 用来打印输出 相当于shell中的echo
exit 退出expect脚本
eof expect执行结束 退出
set 定义变量
puts 输出变量
set timeout 设置超时时间

 

在shell脚本中执行expect命令

#!/bin/bash
#Author luoheng
#Date 20220411
#批量复制公钥
for hostname in k8s-work-dev0{4..9}
do
  /usr/bin/expect<<EOF
  spawn ssh-copy-id ${hostname}
  expect "yes/no"
  send "yes\n"
  expect "password"
  send "admin@K8S\n"
  expect eof
EOF
done

 这样写会有问题:第一次执行的时候程序是完全ok的。但是第二次执行的时候就不会让你输入yes/no了。这个时候程序就会卡住。

所以建议使用这样写

/usr/bin/expect<<EOF
spawn ssh-copy-id ${hostname}
expect {
"yes/no" {send "yes\n";exp_continue}
"password" {send "admin@K8S\n"}
}
expect eof
EOF

 

参考文档:https://www.cnblogs.com/saneri/p/10819348.html

posted @ 2022-04-11 11:06  李成敏  阅读(999)  评论(0编辑  收藏  举报