前言
我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,这时候就用到了expect。
举例:
1、复制本地文件到服务器中,此时会要求先确认再输入密码(先输入“yes”再输入密码),如下图
2、设置jdk版本时sudo update-alternatives --config java,需要输入序号选择JDK版本,如下图
使用步骤:
1、安装expect
sudo apt-get install expect
2、创建一个.sh后缀的文件
3、编辑文件,文件开头申明,标识脚本使用的Shell解释器类型为expect:
#! /usr/bin/expect
4、接收文件执行时命令行传参,并定义变量:
set jdk_command [lindex $argv 0]
set jdk_version [lindex $argv 1]
5、使用spawn执行命令:
spawn sudo update-alternatives --config $jdk_command
6、交互开始,检查交互提示行:
expect "type selection number:"
7、交互行输入
send "$jdk_version\r"
8、结束本次交互
expect eof