所以我需要创建一个脚本,在脚本中写入有关电话的详细信息。该文件需要包含: -CALLING_NUMBER - >以0742,0743和0744开头,其余数字随机生成(共10个)
-CALLED_NUMBER - >以07开头,其余数字也是随机的
-START_DATE - >电话的开始日期,格式为yyyy-mm-dd hh24:mm:ss。对于所有电话,开始日期必须从同一天开始,并涵盖当天的所有时间
-END_DATE - >电话结束日期,格式相同,大于开始日期,随机生成0-7200之间的额外秒数
-CALL_TYPE - >如果通话持续时间为1秒,则返回短信,如果超过,则返回“语音”
我有CALLING_NUMBER和CALLED_NUMBER,并且一旦你有结束和开始日期,CALL_TYPE就非常直接。我在开始和结束日期遇到了麻烦。
GNU bash,版本3.2.25(1)-release(x86_64-redhat-linux-gnu)
谢谢!
答案 0 :(得分:1)
这会在特定日期生成一个随机start_date
,然后生成一个随机end_date
,比之前晚0-7200秒:
#!/bin/bash
# all start_date's will be on this day
start_date_anchor="2017-09-01"
# start_date in seconds since Unix epoch
start_date_zero=$(date -d "$start_date_anchor" +%s)
# random offset in seconds from midnight (note: RANDOM is a 15-bit int)
start_date_offset=$(( ((RANDOM<<15)|RANDOM) % 86400 ))
# random start_date in "YYYY-MM-DD HH:MM:SS" format
start_date=$(date -d @"$((start_date_zero + start_date_offset))" +"%F %T")
# 0-7200 seconds offset
end_date_offset=$((RANDOM % 7200))
# end_date in "YYYY-MM-DD HH:MM:SS" format
end_date=$(date -d @"$((start_date_zero + start_date_offset + end_date_offset))" +"%F %T")
echo "Start date: $start_date"
echo "End date: $end_date"
请注意我们在这里使用:
date -d 'some_date' +%s
将some_date
转换为Unix时间戳(自纪元以来的秒数)RANDOM
变量,每次调用/引用时返回15位范围(0到32767)的随机整数。我们可以通过将两个15位整数的位组合为RANDOM<<15 | RANDOM
来获得30位随机整数。date -d @unix_timestamp
将Unix时间戳转换回人类可读的日期/时间+"%F %T"
格式说明符,作为YYYY-mm-dd HH:MM:SS
格式