Câu trả lời:
Nếu bạn có nghĩa là rand
từ các rand
gói (như trái ngược với một từ OpenSSL), nó không hỗ trợ thấp hơn bị ràng buộc, chỉ một trên ràng buộc. Những gì bạn có thể làm là thủ thuật shift-low-ràng buộc-to-zero-then-add-low-ràng buộc:
$ rand -N 10 -M 100 -e -d '\n' | awk '{$0 += 100}1'
170
180
192
168
169
170
117
180
167
142
-N
là số lượng ngẫu nhiên bạn cần-M
sẽ là giới hạn trên của các rand
đầu ra số , vì vậy ( max - min = 100)-e -d '\n'
đặt dấu phân cách thành một dòng mới. Đó là để thuận tiện cho việc xử lý bằng awk
.Các awk
mã sau đó mất mỗi dòng và thêm 100 đến nó.
Sử dụng python
:
#!/usr/bin/env python2
import random
for i in range(10):
print random.randint(100, 200)
Đầu ra:
187
123
194
190
124
121
191
103
126
192
Ở đây tôi đã sử dụng random
mô-đun python
để tạo 10 ( range(10)
) số nguyên ngẫu nhiên trong khoảng từ 100 đến 200 (bao gồm) ( random.randint(100, 200)
).
Đây là một cách Perl:
$ perl -le 'print 100+int(rand(101)) for(1..10)'
129
197
127
167
116
134
143
134
122
117
Or, on the same line:
$ perl -e 'print 100+int(rand(101))." " for(1..10); print "\n"'
147 181 146 115 126 116 154 112 100 116
Bạn cũng có thể sử dụng /dev/urandom
(điều chỉnh từ đây ):
$ for((i=0;i<=10;i++)); do
echo $(( 100+(`od -An -N2 -i /dev/urandom` )%(101)));
done
101
156
102
190
152
130
178
165
186
173
143
Với shuf
từ lõi GNU:
$ shuf -i 100-200 -n 10
159
112
192
140
166
121
135
120
198
139
Bạn có thể sử dụng $RANDOM
.
number=0 #initialize the number
FLOOR=100
RANGE=200
while [ "$number" -le $FLOOR ]
do
number=$RANDOM
let "number %= $RANGE" # Scales $number down within $RANGE.
done
echo "Random number between $FLOOR and $RANGE $number"
echo
Không có gì ngoạn mục - mô phỏng đơn giản của vòng lặp với bộ i
đếm và while
. Phạm vi được thiết lập bằng cách sử dụng if . . . else . . .fi
cấu trúc. Lưu ý bên lề: lời nhắc của tôi là thư mục làm việc trước tiên, sau đó là khu vực nhập liệu, vì vậy đừng nhầm lẫn với những gì bạn thấy
$ ./bashRadom.sh 100 200
190
111
101
158
171
197
199
147
142
125
bashRadom.sh
:
#! /bin/bash
i=0;
while [ $i -lt 10 ]; do
NUM=$RANDOM;
if [ $NUM -gt $1 ] && [ $NUM -lt $2 ]; then
echo $NUM;
else continue;
fi;
i=$((i+1));
done
Đây là mã tôi đã sử dụng khi học lớp C tại trường đại học của tôi. Chỉnh sửa nhỏ mà tôi đã thêm để phù hợp với câu hỏi này là sử dụng các đối số dòng lệnh (thay vì các giá trị mã hóa cứng vào nguồn)
$ gcc randfunc.c
$ ./a.out 100 200
100
106
155
132
161
130
110
195
105
162
187
randfunc.c
:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int randInt (int, int);
void
main (int argc, char *argv[])
{
int min = atoi (argv[1]), max = atoi (argv[2]), i = 0;
srand (time (NULL));
for (i; i < 11; i++)
{
printf ("%d \n", randInt (min, max));
}
}
int
randInt (int a, int b)
{
int randValue;
randValue = a + (int) rand () % (b - a + 1);
return randValue;
}
random
thư viện: stackoverflow.com/a/19728404/2072269 , stackoverflow.com/a/19666713/2072269
rand
gì? CácRANDOM
biến?/dev/random
?/dev/urandom
?