Случайные числа на СИ и цикл в Bash

У меня есть собственная программа на си печатающая в стандартный вывод случайные числа от 0 до заданного в аргументе числа.random_num:

<time.h>

srand(time(NULL)); 
int rnd = rand() % number;

Там еще много кода, но это то, чем я обеспечиваю свой рандом.

Еще есть такой скрипт:

#!/bin/bash

for (( count=1; count<100; count++ ))
    do
        ARG=$(./random_num 4);
        if [[ "$(./a.out $ARG | ./checker_Mac $ARG)" =~ "OK" ]]; then
            echo $ARG
        else
            echo "KO"
        fi
    done

a.out - моя программа по сортировке этих самых случайных чисел. Она выдает набор команд которыми можно отсортировать их. checker_Mac - чекер на правильность сортировки.

Вопрос: я хотел бы этим скриптом проверить правильность моей программы a.out, но запустив скрипт на 100 итераций проверяются всего 2-3 набора чисел. То ли из-за того что программа random_num использует время и быстро работающий скрипт при каждом ее запуске в переменную ARG кладет одни и те же числа, то ли скрипт не запускает random_num при каждой итерации цикла. Я не могу разобраться. Как мне сделать что бы на 1 итерацию скрипта шла проверка одного набора чисел?

Фото с выводом программ


Ответы (1 шт):

Автор решения: Pak Uula

Переменная $RANDOM в bash при каждом обращении возвращает случайное число из интервала 0 - 32767. Вам достаточно написать ARG=$RANDOM.

Если вам нужно 32-х битное случайное число, то можно написать ARG=$(( (RANDOM << 15) + RANDOM )) (на самом деле это 30 битное число, но для целей тестирования, я думаю, не принципиально).

Скрипт для проверки:

for (( count=1; count<10; count++ )); do
    ARG=$(( (RANDOM << 15) + RANDOM ))
    echo $ARG
done

Результат:

593935926
731044276
632282075
547207779
694639298
1063503187
101577290
930433846
49824967
→ Ссылка