Linux: date 和 随机数

本节回顾下 date 和随机数的情况吧,前辈们写的都比较好,在此主要对以下几篇博文做简化与总结,方便以后适合自己回顾
重参博文:
1 》》Linux date命令及系统时间设置
2 》》我使用过的Linux命令之date - 显示、修改系统日期时间
3 》》Linux shell实现随机数的多种方法
4 》》Linux cksum用法


  • 显示系统当前的时间
    • date
  • 显示目前的格林威治时间
    • date -u
  • 以指定的格式显示系统当前的时间
    • date +Format
    • date +%Y-%m-%d

Format的形式如下:

  • %Y YYYY格式的年份(Year)
  • %m mm格式的月份(),01-12
  • %d dd格式的日期(day of month),01-31

  • %H HH格式的小时数(),00-23
  • %M MM格式的分钟数(),00-59
  • %S SS格式的秒数(),00-59
  • %p : 显示本地 AM 或 PM

  • %w 星期几,0-6,0表示星期天

  • %u 星期几,1-7,7表示星期天


  • %F YYYY-mm-dd格式的完整日期(Full date),同%Y-%m-%d

  • %T HH-MM-SS格式的时间(Time),同%H:%M:%S

  • %s 自1970年以来的秒数。

  • %N 从上一秒开始到现在的纳秒数

注意以下大小写的区别:

  • %a : 星期几 (Sun-Sat)
  • %A : 星期几 (Sunday-Saturday)
  • %b : 月份 (Jan-Dec)
  • %B : 月份 (January-December)
  • %c : 直接显示日期与时间
  • %d : 日 (01-31)
  • %D : 直接显示日期 (mm/dd/yy)

注意以上格式是可以任意组合的,还可以包括非格式串,比如 date “+今天是%Y-%d-%m,现在是$H:%M:%S”


  • 显示用STRING指定的日期时间
    • date -d STRING
    • date –date=STRING
    • date -d STRING +FORMAT

实例:

  • 指定日期:date -d YYYY-mm-dd
    • date -d “2011-12-23”
  • 指定时间,日期是今天:date -d HH:MM:SS
    • date -d “12:23:56”
  • 指定日期时间:date -d “YYYY-mm-dd HH:MM:SS”
    • date -d “2011-09-21 10:2:4”
  • 指定1970年以来的秒数:
    • date -d ‘1970-01-01 1251734400 sec utc’ (2009年 09月 01日 星期二 00:00:00 CST)
  • 今天:date
    • date -d today
    • date -d now
  • 几(n)天前:date -d “+n days ago”
  • 几(n)天后 : date -d “-n days ago”
  • 几(n)周前:date -d “+n weeks ago”
  • 几(n)周后:date -d “-n weeks ago”
  • 几(n)月前:date -d “+n months ago”
  • 几(n)月后:date -d “-n months ago”
  • 几(n)年前:date -d “+n years ago”
  • 几(n)年后:date -d “-n years ago”
  • 相应的有 时 分 秒

  • 设置当前时间为STRING指定的日期时间。
    • 格式:date -s STRING
    • 格式:date –set=STRING


Linux 产生随机数

1. 通过时间获得随机数
$ date +%s
1287764773
#获得时间戳,当前到:1970-01-01 00:00:00 相隔的秒数
#如果用它做随机数,相同一秒的数据是一样的。在做循环处理,多线程里面基本不能满足要求了。

$ date +%N
738710457
#获得当前时间的纳秒数据,精确到亿分之一秒。
#这个相当精确了,就算在多cpu,大量循环里面,同一秒里面,也很难出现相同结果,不过不同时间里面还会有大量重复碰撞

$ date +%s%N
1287764807051101270
#这个可以说比较完美了,加入了时间戳,又加上了纳秒
1.2 通过时间来获得随机数。
#!/bin/sh
#获得随机数返回值,shell函数里算出随机数后,更新该值

function random(){
    min=$1   #函数内建变量接受传入的第一个参数
    max=$2   #函数内建变量接受传入的第二个参数
    num=$(date +%s%N) #以时间戳和纳秒形式产生一个唯一数
    retnum=$((num%max+nin)) #产生一个[min max]随机数
    #进行求余数运算即可
    echo $retnum
    #这里通过echo 打印出来值,然后获得函数的,stdout就可以获得值
    #还有一种返回,定义全价变量,然后函数改下内容,外面读取
}

#得到1-10的seq数据项
for i in {1..10}
do 
    out=$(random 11 20)//接受函数的标准输出
    echo $i,"[11,20]",$out
done

2. 内部系统变量($RANDOM)

其实,linux已经提供有个系统环境变量了,直接就是随机数,
$ echo $RANDOM
#产生一个[0, 32767)随机数
$RANDOM * $max / 32767 + 1;
#产生一个[1, max) 随机数;
$RANDOM % 900 + 100
#产生一个三位数的随机数;

3. 读取linux 的uuid码

linux的uuid码也是有内核提供的,在/proc/sys/kernel/random/uuid这个文件内,在使用hibernate 生成主键时,我们经常用这个,所以在这就不错介绍了;


$ cat /proc/sys/kernel/random/uuid
dff68213-b700-4947-87b1-d9e640334196

$ cat /proc/sys/kernel/random/uuid
7b57209a-d285-4fd0-88b4-9d3162d2e1bc
#连续2次读取,得到的uuid是不同的

 $ cat /proc/sys/kernel/random/uuid| cksum | cut -d ' ' -f 1

2141807556

#同上方法得到随机整数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值