网上查了好多资料 感觉也没怎么看明白 哭晕在厕所 我这智商是不是得转产品去了额。。。
主要是因为写了好几个版本 最后把能用的都改瞎了 看来还得再写几个别的 总结总结才好
总之 注意几点:
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