나는 두 가지 명령 중 하나를 실행하려는 C1
및 C2
무작위로합니다. 커맨드 라인 (bash)에서 어떻게합니까? 하나의 라이너가 가능하다면 감사하겠습니다.
답변
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
참고 : 첫 번째 문자 인 $
프롬프트가 나타납니다.
또 다른 예
C2가 실행될 수 있도록 C1이 실패해야하는 경우 위와 같이 재구성 할 수 있습니다.
(( RANDOM%2 == 0 )) && CMD=C1 || CMD=C2
$CMD
왜 if / then 문에 이것을 사용합니까?
이 답변은 약간 비난을 받았지만 내 광기에 대한 방법이 있습니다. 이 패턴은 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