Answers:
在您的特殊情况下:
C$((RANDOM%2+1))
会起作用:)嘿,这是最短的答案!
$((1+1))
> 2
,例如。$(( ))
计算里面的东西。
您可以在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
注意:第一个字符$
,是提示。
如果您担心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
C2
如果C1
失败,这将运行,这将违反问题中列出的规范(即,仅运行其中一个命令)。x && y || z
不等同于if x; then y; else z; fi
。
C1
某条命令有时返回一个非零的退出代码,那么您最终将同时执行这两个命令C1
和执行C2
该操作的时间。
((...))
代替[...]
-双括号专门用于算术表达式。
(( RANDOM % N == 0 ))
而不是(( RANDOM % N ))
。在N = 2的特殊情况下,它们具有相同的概率。