2017-09-27 76 views
0

所以我需要创建一个脚本,在文件中写入关于电话呼叫的详细信息。该文件需要包含: -CALLING_NUMBER - >以0742,0743和0744开头,其余数字随机生成(总共10个)在bash中操作DATE

-CALLED_NUMBER - >以07开头,其余部分数字也随机

-START_DATE - >电话的开始日期,格式为yyyy-mm-dd hh24:mm:ss。对于所有来电,开始日期需要从当天开始并覆盖当天的所有时间

-END_DATE - >以相同格式的电话结束日期大于开始日期,随机产生0-7200

-CALL_TYPE之间

额外秒 - >如果呼叫的持续时间是1秒,它返回SMS,如果是更长的时间,则返回VOICE

我做了CALLING_NUMBER和CALLED_NUMBER一旦你有结束和开始日期,CALL_TYPE就非常简单。我在开始和结束日期遇到麻烦。

GNU的bash,版本3.2.25(1)-release下(x86_64-红帽Linux的GNU的)

谢谢!

+0

的快捷方式添加到您的问题您的操作系统,版本日期命令和你的编码工作。 – Cyrus

+0

所以你需要在同一天随机生成'start_date's?那天是固定的,还是随机的?如果它是随机的,在什么范围? – randomir

+0

如果你使用的是macOS,但是使用Linux,我可以看到使用'bash' 3.2。您应该升级到不超过10年的版本。 – chepner

回答

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' +%ssome_date转换为Unix时间戳(自纪元以来的秒数)
  • bash RANDOM变量,它返回一个15位范围内的随机整数(0到3276 7)每次被调用/引用。通过将两个15位整数的位与:RANDOM<<15 | RANDOM组合起来,我们可以得到一个30位的随机整数。以秒为
  • 日期计算
  • date -d @unix_timestamp到Unix时间戳转换回人类可读的日期/时间
  • +"%F %T"格式说明作为YYYY-mm-dd HH:MM:SS格式