我有部分代码
jmsPort=61015
jmsPorts=(61018 61016 61017)
until [ $jmsPorts -ne $jmsPort ]; do
jmsPort=$(expr $jmsPort + 1)
done
在这种情况下,循环的迭代只有一次,如何使用它 直到jmsPorts数组不包含jmsPort do(jmsPort + 1)
我想实现的目标是
如果jmsPort匹配数组中的元素: 它应该对jmsPort执行+1操作,直到jmsPort与jmsPorts数组中的元素不匹配
如果jmsPort不在数组中: 它应该选择jmsPort
我使用PowerShell完成了此操作,但无法在Bash中执行此操作。 PowerShell中的语法是
$jmsPort = 61016
$jmsPorts = @(61018, 61016, 61017)
do
{
$jmsPort = $jmsPort + 1
}
until ($jmsPorts -notcontains $jmsPort )
答案 0 :(得分:2)
请记住
jmsPorts=() # jmsPorts is an array
要更新数组,最初(在编辑之前)你已经
了jmsPorts+=$(echo $i | grep -oP '\d+') # Wrong
应该
jmsPorts+=( "$(echo $i | grep -oP '\d+')" ) #mind the outer brackets.
现在检查jmsPort
是否与jmsPorts
数组中的任何元素匹配
validator(){
flag=0 # Assuming the element is not present
for i in "${jmsPorts[@]}"
do
if [ "$1" -eq "$i" ]
then
flag=1 # Element is present
fi
done
}
while validator "$jmsPort" && [ "$flag" -eq 1 ]
do
((jmsPort++))
done
echo "Port Chosen : $jmsPort"
# This port doesn't match any value in the array.
警告:端口1-65535可用,1-1023范围内的端口是特权端口。在更复杂的场景中,可能需要额外检查[ $jmsPort -lt 65535 ]
。功能