Я бы сделал это по-другому.
Dirarray= ("dirA" "dirB")
for Dir in "${Dirarray[@]}"; do
cd "$Dir"
for file in "${filearray[@]}"; do
# Here a change. If "$file" exists...
if [[ -e "$file"]]; then
: # do something
fi
done
done
Дополнительные параметры проверки файлов см. В man test
.
Причина в том, что этот способ намного проще. Ну, пока массив не содержит регулярных выражений.
awkрешение:
netstat -nau | awk -F'[[:space:]]+|:' 'NR>2 && $5>=32000 && $5<=64000'
Вывод в вашем случае будет следующим:
udp 0 0 10.0.0.20:55238 0.0.0.0:*
udp 0 0 10.0.0.20:55240 0.0.0.0:*
udp 0 0 10.0.0.20:55244 0.0.0.0:*
udp 0 0 10.0.0.20:32246 0.0.0.0:*
udp 0 0 10.0.0.20:55248 0.0.0.0:*
-F'[[:space:]]+|:'
-разделитель поля
NR>2 && $5>=32000 && $5<=64000
-проверяет, находится ли номер порта в нужном диапазоне
Альтернативноеegrepрешение:
netstat -nau | egrep ':(3[2-9]|[45][0-9])[0-9]{3}|6[0-3][0-9]{3}|64000'
(3[2-9]|[45][0-9])[0-9]{3}
-будет охватывать номера от 32000
до59999
6[0-3][0-9]{3}|64000
-будет охватывать номера от 60000
до 64000
Поскольку netstat
устарел, почему бы не попробовать его превосходящего преемника, ss
.
ss -nau '( sport >= 32000 and sport <= 64000 )'