Пусть скрипт время от времени выполняет команду случайным образом
У меня есть сценарий, который я планирую запускать ежедневно с Cron. Тем не менее, я хочу, чтобы определенный раздел сценария запускался случайным образом с определенной вероятностью выполнения в любой день.
Вот моя основная идея.
используйте $RANDOM и вырезайте, чтобы получить одну случайную цифру:
echo $RANDOM | cut -c1
используйте тест if / then для оценки этой цифры и выполняйте только тогда, когда она соответствует определенному значению:
if [(echo $RANDOM | cut -c1) = 3]; then
echo "YES" >> ~/result.txt
fi
Однако это не работает. Сценарий завершается ошибкой со следующим:
./testscript: line 3: syntax error near unexpected token `echo'
./testscript: line 3: `if [(echo $RANDOM | cut -c1) = 3]; then'
Я думаю, что идея правильна, но я предполагаю, что я неправильно понимаю синтаксис.
Есть идеи?
Использование bash на Mac OSX 10.7.2
Возможно, интересный sidenote: я побежал echo $RANDOM | cut -c1
100000 раз, а затем вычислили частоту, с которой появляется каждая цифра, поэтому, используя это, я могу отрегулировать частоту выполнения сценария, выбрав соответствующие значения. Интересно, что распределение цифр на первый взгляд подчиняется закону Бенфорда...
2 ответа
Использование
if [ "$(echo $RANDOM | cut -c1)" = 3 ]; then
echo "YES" >> ~/result.txt
fi
или даже
[ "${RANDOM:0:1}" = 3 ] && echo "YES" >> ~/result.txt
Лучше проверить, меньше ли $RANDOM заданного числа. Если вы выбрали 10000,
if [ $RANDOM -le 10000 ]; then
echo "YES" >> ~/result.txt
fi
Сделаем трюк. Конечно, вы можете выбрать другой номер. ("-le" означает "меньше или равно").