Как запустить команду 1 из N раз в Bash

Вам необходимо проверить путь расширения:

# php -r "phpinfo();"|grep extension
extension_dir => /usr/lib64/php/modules => /usr/lib64/php/modules

Возможно, curl.soдолжен находиться в другом пути (, т.е./usr/lib64/php/modules).

Также необходимо проверить, существует ли curlбиблиотека libcurl.

15
31.08.2019, 11:14
5 ответов

В ksh, Bash, Zsh, Yash или BusyBoxsh:

[ "$RANDOM" -lt 3277 ] && do_stuff

Специальная переменная RANDOMоболочек Korn, Bash, Yash, Z и BusyBox создает псевдо -случайное десятичное целое число от 0 до 32767 каждый раз, когда она оценивается, поэтому приведенное выше дает (близкое к )один -из -десяти шансов.

Вы можете использовать это для создания функции, которая ведет себя так, как описано в вашем вопросе, по крайней мере, в Bash:

function chance {
  [[ -z $1 || $1 -le 0 ]] && return 1
  [[ $RANDOM -lt $((32767 / $1 + 1)) ]]
}

Если вы забыли указать аргумент или указали недопустимый аргумент, результат будет равен 1, поэтому chance && do_stuffникогда не будет do_stuff.

Здесь используется общая формула для «1 в n » с использованием $RANDOM, то есть [[ $RANDOM -lt $((32767 / n + 1)) ]],давая (⎣32767 / n ⎦ + 1 )из 32768 шансов. Значения n, которые не являются множителями 32768, вносят смещение из-за неравномерного разделения диапазона возможных значений.

41
27.01.2020, 19:49

Альтернативой использованию $RANDOMявляется команда shuf:

[[ $(shuf -i 1-10 -n 1) == 1 ]] && do_stuff

выполнит эту работу. Также полезно для случайного выбора строк из файла, например. для музыкального плейлиста.

21
27.01.2020, 19:49

Не уверен, что вам нужна случайность или периодичность... Для периодичности:

for i in `seq 1 10 100`; do echo $i;done
1
11
21
31
41
51
61
71
81
91

Вы можете смешать это с трюком "$RANDOM" выше, чтобы создать что-то более хаотичное, например:

для i в seq 1 1000 $RANDOM; сделать эхо $i;done

ХТХ:-)

1
27.01.2020, 19:49

Нестандартный -раствор:

[ $(date +%1N) == 1 ] && do_stuff

Проверьте, равна ли последняя цифра текущего времени в наносекундах 1!

25
27.01.2020, 19:49

Улучшить первый ответ и сделать его более очевидным, чего вы пытаетесь достичь:

[ $(( $RANDOM % 10 )) == 0 ] && echo "You win" || echo "You lose"
12
27.01.2020, 19:49

Теги

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