我需要从服务器获取所有正在运行的端口,例如unix命令' netstat -an | grep tcp46'
输出:
tcp46 0 0 *.8009 *.* LISTEN
tcp46 0 0 *.8080 *.* LISTEN
然后我需要迭代端口并形成如下命令。
curl http://serverhost.com:$ {iterative ports} / app / version
例如
任何人都可以帮助我使用shell脚本或任何简单的命令吗?
答案 0 :(得分:0)
我的netstat -an输出与你的不同,所以我在这里盲目进行:
for netstat -an | grep tcp46 | cut -d' ' -f18 | sed 's/*.//g'
;做回声卷曲http://serverhost.com:$ i / app / version;完成
这是一个应该工作的单线,但它假设输出与你说的相同,如果空格数改变那么它就不能正常工作。如果要直接运行命令,只需删除echo。
答案 1 :(得分:0)
您可以在sed
中使用正则表达式(REGEX)从grep
输入流中获取所需的输出。然后在bash for循环中,对找到的每个端口执行curl
命令。注意:以下内容不检查重复端口。
for port in $(netstat -an | grep tcp46 | sed 's/[a-zA-Z]\{1,3\}[ 0-9.]*:\{1,3\}//g' | sed 's/ \+.*//g');
do echo "curl http://serverhost.com:$port/app/version" >> commandFile.txt;
done
我调用sed两次:一次删除字符串的第一部分,第二次删除尾部。
此脚本的输出将发送到当前目录中的commandFile.txt
。
如果您希望运行每个curl命令而不是发送到文件,只需删除回声,如下所示:
for port in $(netstat -an | grep tcp46 | sed 's/[a-zA-Z]\{1,3\}[ 0-9.]*:\{1,3\}//g' | sed 's/ \+.*//g');
do curl http://serverhost.com:$port/app/version;
done