Случайные числа на СИ и цикл в 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 шт):
Переменная $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
