网上查了好多资料 感觉也没怎么看明白 哭晕在厕所 我这智商是不是得转产品去了额。。。
主要是因为写了好几个版本 最后把能用的都改瞎了 看来还得再写几个别的 总结总结才好
总之 注意几点:
1、expect代码块里面末尾需要写
interact(但是我写了这句话不太好使 可能是因为有EOF的原因?)
或
send exit\r
expect eof
2、expect代码块中像简单的send ls\r这种直接写就好了,遇到比较复杂的awk命令得用{}阔起来,$需要转义一下。。。
{}:保留所有字符原有的意思,而不做解释,类似于shell中的单引号。
下面是最近写的查看n个服务器上的nginx log文件,然后统计每秒钟访问量最大的10个。。。awk命令用的也比较low。。。
#!/bin/sh
funcA() {
expect << EOF
set timeout 100
spawn ssh username@$server
expect password
send $pass
send {cat /var/log/nginx-access.log-20180714 | awk -F '2018-07-13T' '{print \$2}'|awk -F '+' '{a[\$1]++} END{ for (i in a) print i,a[i]}' | sort -k 2 -rn | head -10}
send \r
send exit\r
expect eof
EOF
}
ips=(123.123.123.123 456.456.456.456)
length=${#ips[*]}
pass='password\r'
for((i=0;i<$length;i++));
do
server=${ips[$i]}
funcA
done
最后贴几个参考文章:
http://www.cnblogs.com/lixigang/articles/4849527.html
http://blog.51cto.com/luzhi1024/1660276
http://www.nginx.cn/1934.html
http://blog.sina.com.cn/s/blog_6151984a0100emri.html
https://www.cnblogs.com/li-daphne/p/7234721.html
本文介绍了在shell脚本中如何嵌入expect和awk命令,特别是awk命令在处理复杂任务如分析nginx日志时的应用。在expect代码块中,注意使用`interact`或`send exit
expect eof`来结束交互。对于awk命令,复杂情况需用花括号包裹并转义 `$` 符号。举例说明,作者分享了查看多台服务器上nginx日志并统计秒级访问量最大10个的场景。文章提供了多个参考资料供读者深入学习。
994

被折叠的 条评论
为什么被折叠?



