自学内容网 自学内容网

第五节shell脚本中的运行流程控制(5.1)

五, 自动应答

在书写脚本时通常会遇到交互命令的执行, 如何自动完成跟命令的交互, 这就是自动应答的作用

1, 固定位置的交互应答

如果交互命令的问题固定, 那么我们可以通过输入重定向来完成交互动作

示例:

#!/bin/bash
for USERNAME in user1 user2 user3
do
    passwd $USRNAEM <<EOF
    123
    123
    EOF
done

2, 非固定位置的交互应答

如果交互命令的问题位置不固定, 那么我们需要用的 expect 来完成自动应答

示例:

a)创建交互命令

vim ask.sh
#!/bin/bash
read -p "what is your name: " NAME
#read -p "how old are you: " AGE
read -p "which subject you study: " SUB
read -p "Are you happy ? " FEEL

echo $NAME is $AGE\'s old study $SUB feel $FEEL

[!note]

在交互脚本中我们可以使用#注释问题来还原问题有的时候, 有, 有时没的

b)应答语句基本写法

vim demo_answer.exp
#!/usr/bin/expect
set timeout 5
spawn sh ask.sh
expect {
"name" { send "lee\r";exp_continue  }
"old" {send "18\r";exp_continue }
"subject" { send "linux\r";exp_continue }
"happy" { send "happy\r" }
}
expect eof

[!note]

set timeout 设置问题等待超时

spawn 监控交互来使 expect 可以读取问题

send 发送问题答案,\r 表示回车, exp_continue 表示继续向下应答

expect eof 表示在问题应答完毕后退出 expert 环境, 如果要保留环境可以用 interact


原文地址:https://blog.csdn.net/weixin_73298423/article/details/140674636

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!