今天,为了练习一个脚本,需要得到一个范围内的随机数。遇到几个问题:
1. bin/sh里没有$RANDOM, 而是在bin/bash。(ubuntu12.04)
2. 如果随机数范围小于$RANDOM, 可用echo "$min + $RANDOM%($max-$min)"。但是如果范围大于RANDOM,这个式子就不适用了。而要用
echo "$min + $RANDOM / $RANDOM_MAX_INT * ($max-$min+1)" | bc -l 这里的bc是为了支持浮点运算,否则$RANDOM / $RANDOM等于0或1。这样还不行,因为bc -l输出的是浮点数,小数点后很多位。于是要把整数部分截取---random=${random%.*}。这个截取我是看了网上的一个写法,开始搞不明白啥意思,后来查了下。原来是shell里的字符串匹配处理,比如${#param}, ${param%word}, ${param#word}, 其中的word还可以符号扩展。这些很有用,也很强大。random=${random%.*}就是取random小数点前面的数字。
3."$min + $RANDOM / $RANDOM_MAX_INT * ($max-%min+1) | bc -l 这个其实也有问题,因为有些数字通过这个式子肯定产生不出来。原因就是从1到$RANDOM,每个数字对应范围(min, max)内的多个连续数字。怎样才能有一个在任意范围(min, max)内的均匀分布的随机数呢?