Faça com que um script execute um comando aleatoriamente de vez em quando

1

Eu tenho um script que estou programando para rodar diariamente com o Cron. No entanto, quero que uma determinada seção do script seja executada aleatoriamente ocasionalmente, com uma certa probabilidade de execução em qualquer dia.

Aqui está minha ideia básica.

use $ RANDOM e corte para obter um único dígito aleatório:

echo $RANDOM | cut -c1

use um teste if / then para avaliar esse dígito e execute somente quando ele corresponder a um determinado valor:

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

No entanto, isso não está funcionando. O script falha com o seguinte:

./testscript: line 3: syntax error near unexpected token 'echo'
./testscript: line 3: 'if [(echo $RANDOM | cut -c1) = 3]; then'

Acho que a ideia é boa, mas estou supondo que estou com a sintaxe errada.

Alguma idéia?

Usando o bash no Mac OSX 10.7.2

Sidenote possivelmente interessante: Corri echo $RANDOM | cut -c1 100.000 vezes e, em seguida, calculei a frequência com que cada dígito aparece, portanto, usando isso, posso ajustar a frequência com que o script é executado selecionando os valores apropriados. Curiosamente, a distribuição de dígitos à primeira vista parece obedecer à Lei de Benford ...

    
por Themistocles 02.12.2011 / 09:54

2 respostas

1

use

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

ou até mesmo

[ "${RANDOM:0:1}" = 3 ] && echo "YES" >> ~/result.txt
    
por 02.12.2011 / 10:26
3

É melhor testar se $ RANDOM é menor que um determinado número. Se você escolheu 10000,

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

Vai fazer o truque. Claro que você pode escolher um número diferente. ("-le" significa menor que-ou-igual).

    
por 02.12.2011 / 10:34