交互式脚本能够给用户一些提示,使用起来也更容易。
向脚本发送参数
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不会自动添加换行符,也能够理解转义字符。