随机运行命令

随机运行命令

我想随机运行这两个命令C1之一C2。如何在命令行(bash)上执行此操作?如果可以的话,我将不胜感激。

答案1

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

答案2

在你的特殊情况下:

C$((RANDOM%2+1))

会起作用的:)嘿,这是最短的答案!

答案3

你可以在 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 语句中使用它?

这个答案受到了一些批评,但我的疯狂有一个方法。虽然这种模式可能看起来比 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

参考

相关内容