Производить команды произвольно

Я хочу запустить одну из двух команд C1 и C2 в случайном порядке. Как это сделать в командной строке (bash)? Поймите, если один лайнер возможен.

  • Выполнение произвольной команды
  • 3 Solutions collect form web for “Производить команды произвольно”

     if (( RANDOM % 2 )); then C1; else C2; fi 

    В вашем специальном случае:

     C$((RANDOM%2+1)) 

    будет работать 🙂 И эй, это самый короткий ответ!

    Вы можете сделать что-то подобное в Bash:

     $ (( RANDOM%2 == 0 )) && C1 || C2 

    Это порождает случайное число, либо 0, либо 1. Если оно равно 0, то выполняется C1, иначе выполняется C2, если это не так.

    пример

     $ (( RANDOM%2 == 0 )) && echo 0 || echo 1 1 $ (( RANDOM%2 == 0 )) && echo 0 || echo 1 0 

    ПРИМЕЧАНИЕ. Первым символом является $ prompt.

    другой пример

    Если вы заинтересованы в том, чтобы C1 был терпеть неудачу, чтобы C2 мог работать, вы могли бы реструктурировать вышеупомянутое так:

     (( RANDOM%2 == 0 )) && CMD=C1 || CMD=C2 $CMD 

    зачем использовать это над оператором if / then?

    Этот ответ подвергся критике, но есть способ моего безумия. Хотя этот шаблон может казаться более неясным, чем если бы, то я нахожу его более читабельным и компактным, когда делаю что-то вроде следующего:

     #!/bin/bash CMD="" DIRS="/etc /home /www /data1 /data2 /var/log /var/spool/mail" FILE="/backup/$(hostname)-$(date +'%m-%d-%y').tar.gz" [ "$1" == "nas" ] && CMD="lftp -u user,password -e 'cd /dump/; mput /backup/*; quit' nas.mylan.com" || : [ "$1" == "scp" ] && CMD="scp /backup/* scponly@dumpserver:incoming' username" || : [ "$1" == "tape" ] && CMD='tar -cf /dev/st0 /backup/*' || : [ "$CMD" == "" ] && exit 1 || : # make a backup tar -zcvf $FILE $DIRS # Now depend upon circumstances run a backup command $CMD 

    Рекомендации

    • Совет скрипта оболочки Bash: запуск команд из переменной
    Linux и Unix - лучшая ОС в мире.