《Linux Shell 脚本攻略(第 2 版)》读书笔记
通过脚本进行交互式输入自动化
#!/bin/bash
#文件名:interactive.sh
read -p "Enter number: " no
read -p "Enter name: " name
echo You have entered $no, $name
按照下面的方法向脚本自动发送输入:
$ echo -e "1\nhello\n" | bash interactive.sh
You have entered 1, hello
# 这里用`-e`来生成输入序列,`-e`表明`echo`会解释转义序列。
如果输入的内容比较多,那么可以用单独的输入文件结合重定向操作符来提供输入:
$ echo -e "1\nhello\n" > input.data
$ cat input.data | bash interactive.sh
You have entered 1, hello
用 expect 实现自动化
expect作用:等待特定的输入提示,通过检查输入提示来发送数据。
#!/usr/bin/expect
#文件名:automate_expect.sh
spawn ./interactive.sh # 参数指定需要自动化哪个命令
expect "Enter number: " # 参数提供需要等待的消息
send "3\n" # 要发送的消息
expect "Enter name: "
send "hello\n"
expect eof # 指明命令交互结束
注意:
- 第一行内容,shebang 路径:
#!/usr/bin/expect
- 执行这个脚本之前先要给两个脚本都赋予可执行权限:
$ chmod a+x automate_expect.sh interactive.sh
$ ./automate_expect.sh
spawn ./interactive.sh
Enter number: 3
Enter name: hello
You have entered 3, hello