一.常规输入:回车、Yes/No等
1.cat + 文件 + 管道符
cat commend.txt | apt-get install ssh |
2.echo + 管道符
echo -e "Y" | apt-get remove ssh |
echo -e 处理转义字符 |
3.expect
安装:
sudo apt-get install expect |
编写expect文件如:
#! /usr/bin/expect |
1. [#! /usr/bin/expect]
这个跟bash shell 开头一样,是告诉系统使用那个解释器来解释脚本
注意:这一行需要在脚本的第一行。
2. [set timeout 0]
设置超时时间为0(秒)
3. [spawn sudo apt-get update] spawn [spɔːn]
它主要的功能是给后面的shell语句运行进程加个壳,用来传递交互指令。
4. [expect " "]
意思是判断上次输出结果里是否包含”的字符串,如果有则执行下一步,否则就等待一段时间(timeout)。
5. [send "xxx\r" ]
这里就是发送交互信息,与手动输入相同。 命令字符串结尾加上“\r”,如果出现异常等待的状态可以核查一下。
6. [interact]
执行完成后保持交互状态,把控制权从expect交会给shell,shell就可以执行spawn加壳的命令。
没有这句的话,即使已经成功输入,也不会执行shell命令,因为控制权还是expect手里,而expect是不能解释shell命令的。
运行:
./test3.expect |
root@type-ThinkPad-T480s:/home/type# ./test3.expect |
注意后缀为.expect |
4.重定向 + 文件
apt-get install ssh < commend.txt |
特殊地,当一个shell命令需要多个参数时,以echo为例,用\n来区分多个参数,例如parasoft安装时在不同阶段共需要7次交互,可以用以下命令来代替手动操作:
echo -e "1\n\n\n\n\n\n" | ./parasoft_cpptest_professional-2020.1.0.20200422B856-linux.x86_64.sh |
1.expect
#! /usr/bin/expect |
2.EOF文本块
#! /bin/bash |
1.模拟:timeout
timeout 5 apt-get remove ssh |
也适用于输入密码
|
2.杀死进程
su root & |
-SINGSTOP → CTRL+Z
-SIGINT → CTRL+C
实例:docker build自动在镜像中安装parasoft及其依赖环境。
PS:若是apt-get,可以通过apt-get -y xxx来执行自动确认,而无需用echo或expect。