shell 脚本中交互输⼊⾃动化
最近写⾃动安装脚本遇到redis-server安装的时候,需要输⼊3个回车,对此尝试⽆果,最后google⽐较满意的解决办法:shell 脚本需要交互,⽐如输⼊回车,输⼊YES/NO Y/N之类进⾏选择
Linux 中shell脚本运⾏时经常需要进⾏交互,⽐如安装软件的过程中对license声明的确认,需要输⼊yes,回车之类的确认信息。这个在⾃动化安装的时候就会是个问题。
1、利⽤重定向
例:以下的test.sh是要求我们从stdin中分别输⼊no,name然后将输⼊的no,name打印出来
2、利⽤管道完成交互的⾃动化
这个就是利⽤管道特点,让前个命令的输出作为后个命令的输⼊完成的
也⽤上⾯例⼦举例:上⾯中的 "1\nlufbo\n"中的\n 是换⾏符的意思,这个⽐较简单的。
3、利⽤expect
expect是专门⽤来交互⾃动化的⼯具,但它有可能不是随系统就安装好的,有时需要⾃⼰⼿⼯安装该命
令
查看是否已经安装:rpm -qa | grep expect
以下脚本完成跟上述相同的功能1、通常对于这个问题⽐较灵活的解决⽅法就是TCL 的Expect 。但Expect 还需要另外安装,平台通⽤性不⾼,⽐较⿇烦。 2、另外⼀些简单的⽅法倒也是有,不过可⽤性不⾼,特别是对要求多次交互就吃⼒了。但怎么说其还是能解决⼤多数的问题,因为复杂的情况还是⽐较少的。 ⽐如要⼀个调⽤⼀个安装脚本: installWAS.sh, 这个脚本要求输⼊回车, 则可以:echo | installWAS.sh ; 如果要求输⼊yes |no ,加回车,则可以 echo yes |installWAS.sh 这下⾃动化安装就有希望了。
1
2
3
4
5root@localhost test ]# cat test.sh #! /bin/bash read -p "enter number:" no read -p "enter name:" na
me echo you have entered $no , $name #以下是作为输⼊的⽂件内容:[root@localhost test ]# cat input.data 1lufubo #然后我们利⽤重定向来完成交互的⾃动化:[root@localhost test ]# ./test.sh < input.data you have entered 1, lufubo
1
2
3
4
5
6
7
8
9
10
11
12
13
14[root@localhost test ]# echo -e "1\nlufbo\n" | ./test.sh you have entered 1, lufbo
1
2
注意: 第⼀⾏是/usr/bin/expect,这个是选⽤解释器的意思,我们shell⼀般选的是 /bin/bash,这⾥不是
spawn: 指定需要将哪个命令⾃动化 expect: 需要等待的消息 send: 是要发送的命令 expect off: 指明命令交互结束最后具体实现:
参考⽂档:[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
1shell最简单脚本
2
3
4
5
6
7
8[root@localhost opt ]# cat cache.sh #!/bin/bash yum install -y gcc-c++ tcl cd /opt #cache wget dis.io/releases/redis-3.0. #------------------------------------------------------------------------------------##编译源程序tar xf redis-3.0. cd redis-3.0.0 make && cd src && make install cd /opt/redis-3.0.0/utils echo | /bin/bash install_server.sh mv /etc/f /etc/redis/r
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论