2016-07-29 16 views
1

做我有下面的代码直到项目不存在于阵列在bash

jmsPort=61015 
jmsPorts=(61018 61016 61017) 

until [ $jmsPorts -ne $jmsPort ]; do  
    jmsPort=$(expr $jmsPort + 1) 
done 
的一部分

循环的迭代是只有一次在这种情况下,如何使用,直到jmsPorts阵列不允许这样做 不包含jmsPort做(jmsPort + 1)

,我要实现的目标是

如果jmsPort数组中的元素相匹配: 应该做+ 1到jmsPor 故应选择jmsPort

我已经这样做了使用PowerShell,但不能做到这一点在击:T直到jmsPort如果jmsPort是不是数组中不匹配jmsPorts阵列

中的一个元素。 在PowerShell中的语法是

$jmsPort = 61016 
$jmsPorts = @(61018, 61016, 61017) 

do 
{ 
    $jmsPort = $jmsPort + 1 
} 
until ($jmsPorts -notcontains $jmsPort) 
+0

你想用这个脚本实现什么? – sjsam

+0

PowerShell信息是不必要的。您可以删除该部分。 – sjsam

回答

2

记住

jmsPorts=() # jmsPorts is an array 

要更新的阵列,最初(编辑之前)你已经把

jmsPorts+=$(echo $i | grep -oP '\d+') # Wrong 

应该已经

jmsPorts+=("$(echo $i | grep -oP '\d+')") #mind the outer brackets. 

N流动检查jmsPortjmsPorts数组的任何元素匹配做

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 ]

+0

很棒的回答!因为它不适用于所有用例,所以应得的^必须取下我的。 – Inian

+0

它正在退出脚本..它不工作。有什么问题 – Vagho