Que tal isso. Beneficia-se de chamar apenas ss
uma única vez.
USED=$(ss -nat '( sport >= :601 and sport <= :610 )'|awk 'NR>1{print substr($4,3)}')
for PORT in {601..610}; do
echo $USED | grep $PORT >/dev/null
if [ $? != 0 ];then
echo $PORT
exit 0
fi
done
echo no ports available
exit 1
Tentativa ligeiramente mais curta:
USED=$(ss -nat '( sport >= :601 and sport <= :610 )'|awk 'NR>1{print substr($4,3)}')
for PORT in {601..610}; do
[[ ! "$USED" =~ "$PORT" ]] && echo $PORT && exit 0
done
echo no ports available
exit 1