shell用法总结8

200 阅读1分钟

引言

  • 该系列为个人经常需要将项目代码工程化,所以需要用到shell脚本,前段时间的每日一题沸点活动虽然写了不少,但是因为要满足活动要求,所以很多函数等语法无法介绍完全,该文将介绍一个函数具体详细一些的用法

正文 关于shell中的随机数函数RANDOM

  • RANDOM 是 Bash 中用来生成 0 至 32767 之间随机整数的一个内置函数(而非常量)
  • 利用RANDOM取随机数的用法
    • 例如:我们想要产生0-100范围内的数:((((RANDOM%100)) 在(())是可以省略取值的(()) 是可以省略取值的符号的。(All tokens in the expression undergo parameter expansion, string expansion, command substitu-tion, and quote removal.)
    • 用这个环境变量对101取模即可。
  • 示例如下
    • 如果取值范围是从0开始,那么就可以简单一些使用简写
产生0~1之间的随机数
echo $[$RANDOM%2]

产生0~3之间的随机数
echo $[$RANDOM%4]

产生0~9内的随机数
echo $[$RANDOM%10]

产生0~100内的随机数
echo $[$RANDOM%101]
  • 如果取值范围不是从0开始,那么就需要注意使用方法
# 下面这个取值范围+1,1表示start,1+100=101,故100是实际能取到的end值
num=$[RANDOM%100+1]

# 如果想得到1–68范围内的数 :
num=$(($RANDOM%68+1))
# 如果想得到6–87范围内的数 :
num=$(($RANDOM%82+6))
  • 同样类比可以生成限定范围的随机数
# 产生50-100之内的随机数
echo $[$RANDOM%51+50]

# 产生三位数的随机数
echo $[$RANDOM%900+100]
  • 注意执行包含RANDOM函数的shell脚本时候,使用./或者sh来执行shell脚本可能会报错:

sh: arithmetic expression: expecting primary ****

  • 换成bash执行即可,关于bash和sh执行有何区别,下篇文章单独介绍,以下为使用该函数设计的一个简单小游戏
# 使用 read 提示用户猜数字,-p 表示后面是要输出的文本,这个cai其实是一个变量名称
# 使用 if 判断用户猜数字的大小关系:‐eq(等于),‐ne(不等于),‐gt(大于),‐ge(大于等于),
# ‐lt(小于),‐le(小于等于)
# fi表示if语句的结束
while  :
do
    read -p "计算机生成了一个 1‐100 的随机数,你猜: " cai
    if [ $cai -eq $num ]
    then
       	echo "恭喜,猜对了"
       	exit
    elif [ $cai -gt $num ]
        then
        echo "Oops,猜大了"
    else
        echo "Oops,猜小了"
    fi
done