目录

交互输入自动化

目录

交互式脚本能够给用户一些提示,使用起来也更容易。

向脚本发送参数

1
echo -e "notes\ndocx\n" | ./backup.sh

如果发送的参数多,可以写入一个文件,从文件中读取

1
2
$ echo -e "notes\ndocx\n" > input.data
$ ./interactive.sh < input.data

缺点:echo -e 无法对数据进行校验,都是以顺序读取参数的,容易出岔。

expect 由tcl语言编写,该程序能够执行复杂的交互操作并适应目标应用的变化。该程序在世界范围内被广泛用于控制硬件测试、验证软件构建、查询路由器统计信息等。

命令 描述
spawn 运行新的目标应用
expect 关注目标应用发送的模式
send 向目标应用发送字符串

脚本内容:

1
2
3
4
5
6
7
8
9
#!/bin/bash
#文件名:backup.sh
# 使用后缀备份文件。不备份以~开头的临时文件
read -p " What folder should be backed up: " folder
read -p " What type of files should be backed up: " suffix
read -p " where directory to backup: " backupto
find $folder -name "*.$suffix" -a ! -name '~*' -exec cp {} \
$backupto \;
echo "Backed up files from $folder to $backupto"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/expect
#文件名: automate_expect.tcl
spawn ./backup.sh
# 设置超时时间
set timeout 20
expect {
"*folder*" {
send "/tmp/0120/notes\n"
exp_continue
}
"*type*" {
send "docx\n"
exp_continue
}
"*directory*" {
send "/root\n"
exp_continue
}
}

备份/tmp/0120/notes目录下的docx文件到/root目录

运行脚本:

1
$ ./automate_expect.tcl
  • spawn命令的参数是需要自动化运行的应用程序及其参数
  • expect命令接受一组模式以及匹配模式时要执行的操作。操作需要放入花括号中。
  • send命令是要发送的信息。和echo -n -e类似,send不会自动添加换行符,也能够理解转义字符。