Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash检查给定的端口范围(如果正在使用),并告知是否所有端口都在使用_Bash - Fatal编程技术网

bash检查给定的端口范围(如果正在使用),并告知是否所有端口都在使用

bash检查给定的端口范围(如果正在使用),并告知是否所有端口都在使用,bash,Bash,我有一个bash脚本,它检查给定的端口范围,查看是否有任何端口正在使用,并选择一个未使用的端口 启动_端口=5550 结束端口=5650 功能检查端口{ echo“我要找到一个开放的端口来使用” 对于以美元表示的i(seq$起始端口$结束端口);执行 如果!lsof-Pi:$i-sTCP:LISTEN-t>/dev/null;那么 echo“$i未使用,我将选择此项” 端口到使用=$i fi 完成 } 检查端口 但是,我想再进一步检查一下是否所有端口都在使用中,返回如下内容: echo“我找不

我有一个bash脚本,它检查给定的端口范围,查看是否有任何端口正在使用,并选择一个未使用的端口

启动_端口=5550
结束端口=5650
功能检查端口{
echo“我要找到一个开放的端口来使用”
对于以美元表示的i(seq$起始端口$结束端口);执行
如果!lsof-Pi:$i-sTCP:LISTEN-t>/dev/null;那么
echo“$i未使用,我将选择此项”
端口到使用=$i
fi
完成
}
检查端口
但是,我想再进一步检查一下是否所有端口都在使用中,返回如下内容:

echo“我找不到要使用的端口,所有给定的端口都在使用中”

如何做到这一点?

如果我从您上次的评论中了解到,您有数千个端口正在使用,并且您希望能够设置一些起始端口号,并在端口号上迭代,直到找到可用的
端口供您使用
,那么您可以使用上面概述的
netstat
,并使用GNU
awk
(例如,
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<代码>,以限制您考虑到的代码的数量:<代码>结束/代码>规则。下面只考虑端口从最小值到 EnthPix。(您也可以重新排列并只添加一个数字来考虑,如<代码> 150 /代码>,只需从最小值做起)

将其与本地端口一起使用时,会将正在使用的端口列为:

22
25
25
68
123
123
123
123
631
631
2677
5353
51310
(这似乎更接近您所寻找的范围)


试一试,如果您还有其他问题,请告诉我。

如果我从您上次的评论中了解到,您有数千个端口正在使用,并且您希望能够设置一些起始端口号,并在端口号上迭代,直到您找到可用的
端口以供使用
,那么您可以使用
netstat
,如abo所述ve,并使用GNU
awk
(例如
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<代码>,以限制您考虑到的代码的数量:<代码>结束/代码>规则。下面只考虑端口从最小值到 EnthPix。(您也可以重新排列并只添加一个数字来考虑,如<代码> 150 /代码>,只需从最小值做起)

将其与本地端口一起使用时,会将正在使用的端口列为:

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
明星