通常,我们可能会使用expect命令来自动交互式的输入密码或者执行一些命令。但是expect命令毕竟还算是比较少用的,如果我们想要对其输出的信息进行过滤分析的话,直接使用expect命令来实现可能相对比较复杂。一般我们还是希望能通过shell来实现比较简单。但是我们知道shell脚本语法及其调用的解释器和expect并不相同,将两者直接在同一个脚本文件中顺序使用的话,肯定会报错的。
这里其实我们可以将expcet命令要执行的一些操作封装到一个shell的函数中,之后再调用执行这个函数,获取其输出信息后,再通过管道符及grep进行过滤等操作。
如下所示,我们将使用expcet命令自动输入密码并执行display version命令获取交换机版本信息,并使用grep命令让其只输出以Quidway开头的那一行内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@imzcy ~]# cat version.sh #!/bin/bash zcy(){ /usr/bin/expect <<EOF spawn telnet 192.168.1.7 expect "Password:" send "pass123\r" send "display version\r" send "quit\r" expect eof EOF } zcy |grep ^Quidway [root@imzcy ~]# |
执行效果如下所示:
1 2 3 |
[root@imzcy ~]# sh version.sh Quidway S5720S-28P-LI-AC Routing Switch uptime is 1 weeks, 3 days, 8 hours, 35 minutes [root@imzcy ~]# |