2017-09-27 71 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格式