Пусть скрипт время от времени выполняет команду случайным образом

У меня есть сценарий, который я планирую запускать ежедневно с 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" означает "меньше или равно").

Другие вопросы по тегам