while :; do
if date -d "$(shuf -n1 -i0-2019)-$(shuf -n1 -i1-12)-$(shuf -n1 -i1-31) + 28 days"; then
break
fi
done 2>/dev/null
示例运行
$ while :;do if date -d "$(shuf -n1 -i0-2019)-$(shuf -n1 -i1-12)-$(shuf -n1 -i1-31)+28days";then break;fi;done 2>/dev/null
Tue Nov 19 00:00:00 CET 1946
多个日期的循环
如果要创建多个这些随机日期,请按如下方式更改循环:
i=0
while ((i<3)); do
if date -d "$(shuf -n1 -i0-2019)-$(shuf -n1 -i1-12)-$(shuf -n1 -i31-31) + 28 days"; then
((i++))
fi
done 2>/dev/null
我在这里使用的第 2 行3中的数字是要输出的日期数。
示例运行
$ i=0;while ((i<3));do if date -d "$(shuf -n1 -i0-2019)-$(shuf -n1 -i1-12)-$(shuf -n1 -i31-31)+28days";then ((i++));fi;done 2>/dev/null
Sat Nov 28 00:00:00 LMT 0572
Wed Apr 28 00:00:00 LMT 0771
Sun Nov 28 00:00:00 LMT 0917
shuf
- 生成随机排列您可以
shuf
按如下方式使用:例如,从到的数字列表中
shuf -n1 -i0-2019
输出数字,因此它会为您提供此范围内的随机年份。月 ( ) 和日 ( ) 也是如此。这种方法有一个问题:例如“2019-2-31”不是一个有效日期将失败并出现错误:1
0
2019
1-12
1-31
date
解决方法循环
您可以使用仅在命令成功时退出并抑制错误消息的循环来解决此问题(通过将 stderr 重定向到
/dev/null
):示例运行
多个日期的循环
如果要创建多个这些随机日期,请按如下方式更改循环:
我在这里使用的第 2 行
3
中的数字是要输出的日期数。示例运行