Function:
function executeTcpConnetions() {
host=$1
port=$2
max=$3
trues=0
falses=0
count=0
while [ $count -lt $max ]
do
timeout 2 bash -c "</dev/tcp/$host/$port" && ((trues++)) || ((falses++));
((count++))
done
echo $trues $falses }
我看到如果你用 max=1 调用该函数,echo 将为真返回 1,为假返回 1。但是为什么在第一次迭代中两个 bash aritimetic 都被执行了呢?如果您提供 1000 或任何大于 1 的值,它将像我想象的那样工作。
这个想法是测试tcp连接,如果能够连接...如果是,请在 trues 中添加 1...如果否,则在 false 中添加 1。
(( expression ))
如果
EXPRESSION
计算结果为 0,则返回 1;否则返回 0。
如果使用后增量且变量等于 0,则表达式的计算结果将为 0,并将返回 1:
$ var=0
$ ((var++)) || echo failed
failed
$ var=10
$ ((var-10)) || echo failed
failed
$ var=-1
$ ((++var)) || echo failed
failed
您可以改用预递增:
$ var=0
$ ((++var)) && echo ok
ok
或者您可以使用if
语句:
if timeout 2 bash -c "</dev/tcp/$host/$port"; then
((trues++))
else
((falses++))
fi
我还建议查看 Bash 陷阱 #22 解释为什么cmd1 && cmd2 || cmd3
不等于if ... then ... else ... fi
.