shell中交互输入自动化

本文介绍了让shell交互输入自动化的方法。一是利用重定向,将输入文件内容重定向给脚本;二是利用管道,让前个命令输出作为后个命令输入;三是利用expect工具,它需手工安装,可指定命令自动化、等待消息并发送命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

shell中有时我们需要交互,但是呢我们又不想每次从stdin输入,想让其自动化,这时我们就要使shell交互输入自动化了。这个功能很有用的哟。好好学习。
1    利用重定向
    重定向的方法应该是最简单的
例:
以下的test.sh是要求我们从stdin中分别输入no,name然后将输入的no,name打印出来
[root@localhost test]# cat test.sh
#! /bin/bash
read -p "enter number:" no
read -p "enter name:" name
echo you have entered $no, $name

以下是作为输入的文件内容:
[root@localhost test]# cat input.data 
1
lufubo

然后我们利用重定向来完成交互的自动化:
[root@localhost test]# ./test.sh < input.data 
you have entered 1, lufubo

如果脚本里有嵌套,那么也可以写到里面,比如

[root@qxztestcentos74 ~]# cat aa.sh 
#!/bin/bash
##install homepage
#yum install -y net-snmp net-snmp-utils sysstat
echo aa
echo bb
bb.sh < cc.txt
#bb.sh
echo cc
#echo you have entered $PRIVATE1, $PRIVATE2, $PUBLIC1, $PUBLIC2, $IP1, $YES1, $HUICHE1, $YES2, $HUICHE2
[root@qxztestcentos74 ~]# cat cc.txt 
p1
p2
pu1
pu2
127.0.0.1
yes11111111111

yes2

[root@qxztestcentos74 ~]# cat bin/bb.sh 
#!/bin/bash
##install homepage
#yum install -y net-snmp net-snmp-utils sysstat
read -p "enter private1:" PRIVATE1
read -p "enter private2:" PRIVATE2
read -p "enter public1:" PUBLIC1
read -p "enter public2:" PUBLIC2
read -p "enter IP1:" IP1
read -p "enter yes1:" YES1
read -p "enter huiche1:" HUICHE1
read -p "enter yes2:" YES2
read -p "enter huiche2:" HUICHE2
echo you have entered $PRIVATE1, $PRIVATE2, $PUBLIC1, $PUBLIC2, $IP1, $YES1, $HUICHE1, $YES2, $HUICHE2
[root@qxztestcentos74 ~]# sh aa.sh 
aa
bb
you have entered p1, p2, pu1, pu2, 127.0.0.1, yes11111111111, , yes2,
cc
[root@qxztestcentos74 ~]#

看吧!效果不错吧!哈哈

2 利用管道完成交互的自动化
这个就是利用管道特点,让前个命令的输出作为后个命令的输入完成的
也用上面例子举例:
[root@localhost test]# echo -e "1\nlufbo\n" | ./test.sh 
you have entered 1, lufbo
上面中的 "1\nlufbo\n" 中的“\n”是换行符的意思,这个比较简单的。

3    利用expect
expect是专门用来交互自动化的工具,但它有可能不是随系统就安装好的,有时需要自己手工安装该命令
查看是否已经安装:rpm -qa | grep expect
以下脚本完成跟上述相同的功能
[root@localhost test]# cat expect_test.sh 
#! /usr/bin/expect
spawn ./test.sh
expect "enter number:"
send "1\n"
expect "enter name:"
send "lufubo\n"
expect off

注意:第一行是/usr/bin/expect,这个是选用解释器的意思,我们shell一般选的是 /bin/bash,这里不是
spawn: 指定需要将哪个命令自动化
expect:需要等待的消息
send:是要发送的命令
expect off:指明命令交互结束
 

转载至https://blog.youkuaiyun.com/lufubo/article/details/7627393

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值