bash를 사용하여 변수를 임의의 값으로 설정하는 방법


14

프로그램에서 변수를 0 또는 1의 임의의 값으로 설정해야합니다.

나는 그것을하는 방법을 알 수 없으며 Google이 실패했습니다.

답변:


30

쉬운 방법 중 하나는 $RANDOM[0; 32767]. 간단히 [0; 1] 난수의 모듈로 2를 계산하여 :

echo $(( $RANDOM % 2 ))

Bash에 대한 추가 정보 $RANDOM: http://www.tldp.org/LDP/abs/html/randomvar.html

이 간단한 구성을 사용하면이 만화처럼 무작위를 사용하여 강력한 스크립트를 쉽게 만들 수 있습니다 ...

커밋 스트립-러시아어 룰렛


4
내 pedant는 선택한 프로덕션 서버가 명령을 파괴하면 아무것도하지 않을 것이라는 점을 지적해야 할 필요가 있다고 생각합니다. --no-preserve-root러시아 룰렛 게임이
Boris the Spider

2
@BoristheSpider 그들은 구식 $[]구문을 사용하고 있습니다-누가 rm--no-preserve-root기능을 가지고 있는지 알고 있습니까?
muru

10
@BoristheSpider 만화에 대한 나의 해석은 그들이 메시지를 볼 때 rm: it is dangerous to operate recursively on '/' rm: use --no-preserve-root to override this failsafe머리를 숙이고 게임을 잃어 버렸다는 것을 알고 dd명예를 잃고 디스크를 지우는 것입니다.
Eliah Kagan

@EliahKagan 아, seppuku. 이해했다.
스파이더 보리스

@BoristheSpider : --no-preserve-root"최근에"구현되었습니다. 언제 구현되었는지에 대한 정보는 없지만 IIRC는 불과 몇 년 전입니다. 그리고 Linux에 관해서는 적은 양입니다. 여기에 대한 티켓이 있습니다 : bugs.launchpad.net/ubuntu/+source/coreutils/+bug/174283
Apache

13

당신은 사용할 수 있습니다 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

예:

$ 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

5

어때요?

#!/bin/bash
r=$(($RANDOM % 2))
echo $r

또는:

r=$(($(od -An -N1 -i /dev/random) % 2))

또는 아마도 :

r=$(seq 0 1 | sort -R  | head -n 1)

또는 더 hackily :

r=$(($(head -128 /dev/urandom | cksum | cut -c1-10) % 2))

그리고 또한:

r=$(apg -a 1 -M n -n 1 -m 8 -E 23456789  | cut -c1)

만큼 잘:

r=$((0x$(cut -c1-1 /proc/sys/kernel/random/uuid) % 2))

1

이 스크립트는 기존 답변보다 이점이 없습니다. 엔터테인먼트 목적으로 만 ...

1 바이트 가져 오기 /dev/urandom(일반적으로 임의의 이진 문자를 콘솔에 보내는 것은 권장되지 않지만 TM은 예상치 못한 / 혼란 한 결과를 초래할 수 있으므로) :

head -c 1 /dev/urandom

그리고 십진수로 바꾸십시오.

head -c 1 /dev/urandom | od -An -t u1

그리고 나머지 부분을 2로 나눕니다.

echo $((`head -c 1 /dev/urandom | od -An -t u1` % 2))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.