- 论坛徽章:
- 0
|
我要实现功能:从“iplist”这个IP地址列表文件中读取地址,并调用expect来实现expect里面登陆,采集等功能,同时记录下日志。并发连接数“SEND_THREAD_NUM”来决定并发连接数的控制。
这个脚本我测试过,可以正确一次读取4个IP并执行。
第一个for循环里的echo的作用,根据网上搜到的知识是,向6里面写入4个空格,然后read从6中按行读取,读取1行后sleep 1S,执行expect,同时向6里面再写入一个IP地址。
疑问1:那4个空格,为何不输出,我改成别的数测试的时候没见到输出也。。而最开始FIFO文件里应该是装了4个空格?
疑问2:第2个for循环里面是如何向6里面写入的,因为按照我的理解,read一行后,6里面是会少一个的,而后echo了一个IP地址写进入又,这样里面就又4个了。没有控制在里面啊。
还是说read会把fifo里面的数据一次读光,第一个调用一个expect,等读取完后,再将里面echo的4个IP写入fifo,然后开始第二次循环?
疑问3: 因为expect会返回一些数据,记录日志的时候能否一个expect的数据在一起,因为测试的时候我看显示是4个expect的数据一起显示的。。看起来很乱。
刚接触管道,只了解一些皮毛,望各位多多指教。。
- #!/bin/bash
- j=0
- MGip=(`cat iplist`)
- LENTH=${#MGip[*]}
- SEND_THREAD_NUM=4
- tmp_fifofile="/tmp/$.fifo"
- mkfifo "$tmp_fifofile"
- exec 6<>"$tmp_fifofile"
- rm $tmp_fifofile
- for ((i=0; i<$SEND_THREAD_NUM; i++))
- do
- echo
- let j++
- done >&6
- for ((i=0; i<$LENTH; i++, j++))
- do
- read -u 6
- {
- sleep 1
- ./expect ${MGip[$i]}
- echo ${MGip[$j]} >&6
- } &
- done
- wait
- exec 6>&-
-
- exit 0
复制代码
|
|