bash检查给定的端口范围(如果正在使用),并告知是否所有端口都在使用
我有一个bash脚本,它检查给定的端口范围,查看是否有任何端口正在使用,并选择一个未使用的端口bash检查给定的端口范围(如果正在使用),并告知是否所有端口都在使用,bash,Bash,我有一个bash脚本,它检查给定的端口范围,查看是否有任何端口正在使用,并选择一个未使用的端口 启动_端口=5550 结束端口=5650 功能检查端口{ echo“我要找到一个开放的端口来使用” 对于以美元表示的i(seq$起始端口$结束端口);执行 如果!lsof-Pi:$i-sTCP:LISTEN-t>/dev/null;那么 echo“$i未使用,我将选择此项” 端口到使用=$i fi 完成 } 检查端口 但是,我想再进一步检查一下是否所有端口都在使用中,返回如下内容: echo“我找不
启动_端口=5550
结束端口=5650
功能检查端口{
echo“我要找到一个开放的端口来使用”
对于以美元表示的i(seq$起始端口$结束端口);执行
如果!lsof-Pi:$i-sTCP:LISTEN-t>/dev/null;那么
echo“$i未使用,我将选择此项”
端口到使用=$i
fi
完成
}
检查端口
但是,我想再进一步检查一下是否所有端口都在使用中,返回如下内容:
echo“我找不到要使用的端口,所有给定的端口都在使用中”
如何做到这一点?如果我从您上次的评论中了解到,您有数千个端口正在使用,并且您希望能够设置一些起始端口号,并在端口号上迭代,直到找到可用的
端口供您使用
,那么您可以使用上面概述的netstat
,并使用GNUawk
(例如,gawk
)轻松找到第一个可用的
例如,如上所述调用netstat
命令,然后使用awk
初始设置port_to_use=minimum_port
并用所有正在使用的端口填充一个数组,然后使用END
规则对正在使用的端口进行排序和迭代,将port_to_use
按1
每次迭代直到使用中的端口,例如,(a[i]>port\u to\u use)
您可以找到第一个可用的端口
对gawk
的一个简短调用应该可以:
#!/bin/bash
netstat --numeric --numeric-ports |
awk -F'[ \t:]*' -v port_to_use=32000 '/[:]/ {
a[i++] = $5
}
END {
n = asort (a)
for (i = 1; i <= n; i++)
if (a[i] == port_to_use)
port_to_use++
else
break;
print "port to use:", port_to_use
}'
(或者只需设置最小端口号,并将其复制/粘贴到没有#!/bin/bash
的终端)
示例
在我的情况下,正在使用的端口是:
36226
36998
38728
46894
49756
52194
54686
...
最初将端口设置为使用=36226会导致:
$ bash find_port_to_use
port to use: 36227
添加一个end\u端口
您可以添加一个<代码> EnthPosie<代码>,以限制您考虑到的代码的数量:<代码>结束/代码>规则。下面只考虑端口从最小值到22
25
25
68
123
123
123
123
631
631
2677
5353
51310
(这似乎更接近您所寻找的范围)
试一试,如果您还有其他问题,请告诉我。如果我从您上次的评论中了解到,您有数千个端口正在使用,并且您希望能够设置一些起始端口号,并在端口号上迭代,直到您找到可用的
端口以供使用
,那么您可以使用netstat
,如abo所述ve,并使用GNUawk
(例如gawk
)轻松找到第一个可用的
例如,如上所述调用netstat
命令,然后使用awk
初始设置port_to_use=minimum_port
并用所有正在使用的端口填充一个数组,然后使用END
规则对正在使用的端口进行排序和迭代,将port_to_use
按1
每次迭代直到使用中的端口,例如,(a[i]>port\u to\u use)
您可以找到第一个可用的端口
对gawk
的一个简短调用应该可以:
#!/bin/bash
netstat --numeric --numeric-ports |
awk -F'[ \t:]*' -v port_to_use=32000 '/[:]/ {
a[i++] = $5
}
END {
n = asort (a)
for (i = 1; i <= n; i++)
if (a[i] == port_to_use)
port_to_use++
else
break;
print "port to use:", port_to_use
}'
(或者只需设置最小端口号,并将其复制/粘贴到没有#!/bin/bash
的终端)
示例
在我的情况下,正在使用的端口是:
36226
36998
38728
46894
49756
52194
54686
...
最初将端口设置为使用=36226会导致:
$ bash find_port_to_use
port to use: 36227
添加一个end\u端口
您可以添加一个<代码> EnthPosie<代码>,以限制您考虑到的代码的数量:<代码>结束/代码>规则。下面只考虑端口从最小值到22
25
25
68
123
123
123
123
631
631
2677
5353
51310
(这似乎更接近您所寻找的范围)
试一试,如果您还有其他问题,请告诉我。我自己设法找到了一个解决方案,这比我想象的要容易得多
!/bin/bash
启动端口=5550
结束端口=5650
功能检查端口{
echo“我要找到一个开放的端口来使用”
对于以美元表示的i(seq$起始端口$结束端口);执行
如果!lsof-Pi:$i-sTCP:LISTEN-t>/dev/null;那么
echo“$i未使用,我将选择此项”
端口到使用=$i
elif[“$i”==“$ending_port”];然后<我只是添加了这个部分。
echo“没有要使用的端口”
fi
完成
}
检查端口
使用netstat
而不是lsof
更快地解决方案
!/bin/bash
启动端口=5550
结束端口=5650
对于以美元表示的i(seq$起始端口$结束端口);执行
如果![$(sudo netstat-plnt | grep:$i”)];那么
echo“$i未使用,我将选择此项”
端口到使用=$i
打破
elif[“$i”==“$ending_port”];然后
echo“没有要使用的端口”
fi
完成
我自己设法找到了一个解决方案,这比我想象的要容易得多
!/bin/bash
启动端口=5550
结束端口=5650
功能检查端口{
echo“我要找到一个开放的端口来使用”
对于以美元表示的i(seq$起始端口$结束端口);执行
如果!lsof-Pi:$i-sTCP:LISTEN-t>/dev/null;那么
echo“$i未使用,我将选择此项”
端口到使用=$i
elif[“$i”==“$ending_port”];然后<我只是添加了这个部分。
echo“没有要使用的端口”
fi
完成
}
检查端口
使用netstat
而不是lsof
更快地解决方案
!/bin/bash
明星