Как создать цикл переменной длины для вывода случайных чисел?

Иногда некоторые операционные системы могут не реагировать должным образом на сообщения icmp-host-prohibitedдля TCP-соединений, поскольку классический ожидаемый способ отклонения TCP-соединения — это пакет TCP RST. (Или, может быть, некоторые брандмауэры не распознают ответ ICMP как относящийся к попытке соединения TCP и не фильтруют его?)

Метод отбраковки по умолчанию дляiptables(и, в более широком смысле, такжеfirewalld)— это icmp-host-prohibited, который пытается быть методом отбраковки «один -размер -подходит для -всех», применимый в равной степени ко всем протоколы. В результате вы можете добавить собственное правило отклонения для пакетов TCP,используя тип отклонения tcp-reset.

Синтаксис firewall-cmdрасширенного правила для отклонения TCP будет примерно таким:

firewall-cmd --zone=internal --add-rich-rule='rule protocol value="tcp" reject type="tcp-reset"'
6
03.05.2020, 23:21
3 ответа

Нет такого синтаксиса, как [x..y]. Вы, вероятно, думаете о {x..y}, но не работает , если xили yявляются переменными.

Вместо этого вы можете попробовать один из них:

for((i=1;i<=$rows;i++)); do
    echo "$RANDOM"
done

Или

for i in $(seq 1 "$rows"); do
    echo "$RANDOM"
done

Или

i=0 
while (( ++i <= rows)); do
    echo "$RANDOM"; 
done

Или даже

i=0
until [ $i -gt $rows ]; do 
    echo "$RANDOM"
    ((i++))
done
9
28.04.2021, 23:16

Как указал terdon , используемый вами синтаксис неверен, и далее он привел несколько примеров циклов, которые будут работать.

Однако, чтобы напечатать $rowsколичество случайных целых чисел, вы также можете использовать

jot -r "$rows"

или, что то же самое,

jot -r "$rows" 1 100

, который будет выводить $rowsслучайные целые числа от 1 до 100 включительно(jotдоступен в системах BSD или в пакете athena-jotв некоторых системах Linux ).

Или,

shuf -i 1-100 -r -n "$rows"

, который делает то же самое, что и команда jotвыше (shuf, является частью GNU coreutils ).

Чтобы создать матрицу из $colsумноженных на $rowsзаписей, вы можете использовать rs(rs, доступный в системах BSD, или в пакете rsв некоторых системах Linux):

$ rows=4
$ cols=6
$ jot -r "$(( rows * cols ))" | rs "$rows" "$cols"
37  29  2   74  5   14
82  86  74  63  73  9
58  10  14  96  12  90
98  13  55  56  40  52

Обратите внимание, что нам нужно $rows * $colsслучайных чисел. Используемый здесь пример получает их из jot, но shufтакже можно использовать (или любую другую команду, которая производит числа ).

5
28.04.2021, 23:16

Сzsh:

$ eval print -C4 '$(('{1..20}', RANDOM))'
11190  17138  16156  5735
16751  13545  22647  13244
12925  11584  10984  32387
32093  8170   5305   6102
25136  30299  3944   9956

Или используя GNU shufдля указания диапазона:

$ print -C4 $(shuf -i 0-99 -n 20)
96  55  93  33
25  7   19  60
34  51  88  46
79  13  70  98
63  37  69  41
0
28.04.2021, 23:16

Теги

Похожие вопросы