如何使用bash将变量设置为随机值

che*_*456 15 command-line bash

在程序中,我需要将变量设置为 0 或 1 的随机值。

我不知道该怎么做,谷歌让我失望了。

Byt*_*der 32

一种简单的方法是使用$RANDOM检索范围 [0; ] 的伪随机 16 位整数。32767]。您可以简单地将其转换为 [0; 1] 通过计算随机数的模 2:

echo $(( $RANDOM % 2 ))
Run Code Online (Sandbox Code Playgroud)

有关 Bash 的更多信息$RANDOMhttp : //www.tldp.org/LDP/abs/html/randomvar.html

通过这个简单的构造,您可以使用随机性轻松构建强大的脚本,就像在这部漫画中一样......

Commit Strip - 俄罗斯轮盘赌

  • @BoristheSpider 我对漫画的解释是,当他们看到消息`rm:在'/'`上递归操作是危险的`rm:使用--no-preserve-root来覆盖这个故障安全`时,他们垂下了头低,并且知道他们已经输掉了比赛,出于荣誉,继续使用`dd`擦除他们的磁盘。 (11认同)
  • 我的学究觉得有必要指出,如果没有`--no-preserve-root`,所选的生产服务器销毁命令将不会做任何事情 - 所以也许不是他们希望的俄罗斯轮盘游戏...... (4认同)
  • @BoristheSpider 他们使用的是过时的`$[]` 语法-谁知道他们的`rm` 是否具有`--no-preserve-root` 功能? (2认同)

Zan*_*nna 15

你可以用 shuf

DESCRIPTION
     Write a random permutation of the input lines to standard output.

     -i, --input-range=LO-HI
            treat each number LO through HI as an input line
     -n, --head-count=COUNT
            output at most COUNT lines
Run Code Online (Sandbox Code Playgroud)

例子:

$ foo=$(shuf -i0-1 -n1)
$ echo $foo
1
$ foo=$(shuf -i0-1 -n1)
$ echo $foo
0
$ foo=$(shuf -i0-1 -n1)
$ echo $foo
0
$ foo=$(shuf -i0-1 -n1)
$ echo $foo
1
Run Code Online (Sandbox Code Playgroud)


Col*_*ing 5

怎么样:

#!/bin/bash
r=$(($RANDOM % 2))
echo $r
Run Code Online (Sandbox Code Playgroud)

甚至:

r=$(($(od -An -N1 -i /dev/random) % 2))
Run Code Online (Sandbox Code Playgroud)

也许:

r=$(seq 0 1 | sort -R  | head -n 1)
Run Code Online (Sandbox Code Playgroud)

或者更骇人听闻:

r=$(($(head -128 /dev/urandom | cksum | cut -c1-10) % 2))
Run Code Online (Sandbox Code Playgroud)

并且:

r=$(apg -a 1 -M n -n 1 -m 8 -E 23456789  | cut -c1)
Run Code Online (Sandbox Code Playgroud)

也:

r=$((0x$(cut -c1-1 /proc/sys/kernel/random/uuid) % 2))
Run Code Online (Sandbox Code Playgroud)