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