在执行命令或脚本的时候,当控制台提示我们需要输入账号密码、参数等信息的时候,expect可以将预设的参数值自动输入到控制台,实现了自动交互。
1. 安装expect
yum install expect
2. 案例:
创建 demo.exp 文件,并添加以下内容
#!/usr/bin/expect
# 定义变量
set username "小白"
set password "123abc"
# spawn 可以执行脚本或命令,并监控需要交互的提示信息
spawn sh test.sh
# 当出现指定提示语的时候
expect "请输入username"
# 自动输入内容并回车确定
send "${username}\r"
expect "请输入password"
send "${password}\r"
# 退出自动交互
expect eof
创建test.sh文件,并添加以下内容
#!/bin/bash
echo "请输入username: "
read username
echo "请输入password: "
read password
echo "==================="
echo "$username"
echo "$password"
执行命令:expect demo.exp
3.expect其它语法
# 接收第一个参数并赋值给变量
set arg [lindex $argv 0]
# 条件判断
if { $arg == "11" } {
# 输出内容
puts "111"
} elseif {$arg == "22"} {
puts "222"
} else {
puts "参数错误"
# 退出脚本
exit
}
# 执行Linux命令,这种方式执行Linux命令返回的内容不会输出到控制台上,可使用>>将内容重定向到日志文件中
exec echo "123" >> test.log
# 获取上一条命令返回的状态码
set code [catch {exec uname -a}]
puts $code