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

903
Themistocles

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

Возможно, интересная заметка: я бегал echo $RANDOM | cut -c1100 000 раз, а затем определил частоту, с которой появляется каждая цифра, поэтому, используя эту функцию, я могу настроить частоту выполнения сценария, выбрав соответствующие значения. Интересно, что распределение цифр на первый взгляд подчиняется закону Бенфорда ...

1

2 ответа на вопрос

3
Adrian Ratnapala

Лучше проверить, меньше ли $ RANDOM заданного числа. Если вы выбрали 10000,

if [ $RANDOM -le 10000 ]; then echo "YES" >> ~/result.txt  fi  

Сделаем трюк. Конечно, вы можете выбрать другой номер. («-le» означает «меньше или равно»).

1
rush

использование

if [ "$(echo $RANDOM | cut -c1)" = 3 ]; then echo "YES" >> ~/result.txt fi 

или даже

[ "$" = 3 ] && echo "YES" >> ~/result.txt 
Это тоже работает! Спасибо за показ, как это можно сделать другими способами. Выбрал это как мой принятый ответ, потому что это исправляет способ, которым я пытался это сделать, хотя другой предоставленный ответ также работает. Themistocles 12 лет назад 0

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