Цикл даты и времени в bash

Для тех, кто ищет простой ответ, просто используйте префикс + : , затем введите панель захвата -S -3000 + return (Замените 3000 тем количеством строк, которое вы хотите сохранить.) Это копирует эти строки в буфер.

Затем, чтобы сохранить буфер в файл, просто используйте префикс + : еще раз и введите save-buffer filename.txt + ] return , заменив filename на что угодно.

(По умолчанию префикс равен ctrl + b .)

1
17.04.2019, 01:12
2 ответа

Попробуйте это.

#!/bin/bash
#
yesterday=$(date --utc --date 'yesterday' +'%Y-%m-%d')
for hour in {0..23}
do
    printf "https://abcd.com/logs?start=%sT%02d:00:00Z&end=%sT%02d:59:59Z\n" $yesterday $hour $yesterday $hour
done

Случайные високосные секунды не обрабатываются. Если вам это нужно, используйте этот более сложный код, где последний диапазон дня, возможно, должен перейти от 23:00:00к 23:59:60, но убедитесь, что ваше целевое приложение также может обрабатывать это:

#!/bin/bash
#
yesterday=$(date --utc --date 'yesterday' +'%Y-%m-%d')
leapsecond=$(date --utc --date @$(( $(date --utc --date '00:00:00' +%s) -1 )) +'%S')
lastsecond=59

for hour in {0..23}
do
    [[ hour == 23 ]] && lastsecond=$leapsecond
    printf "https://abcd.com/logs?start=%sT%02d:00:00Z&end=%sT%02d:59:%02dZ\n" $yesterday $hour $yesterday $hour $lastsecond
done
1
27.01.2020, 23:43

Я получаю ожидаемый результат.

#!/bin/bash
for i in {00..23}
do FROM_DATE=$(date -u -d "1 day ago" +%Y-%m-%d"T"$i":00:00Z")
echo "FROM_DATE:" $FROM_DATE | tr -d '\r'
TO_DATE=$(date -u +%Y-%m-%d"T"$i":59:59Z" -d "1 day ago")
echo "TO_DATE : $TO_DATE" | tr -d '\r'
done

Большое спасибо за помощь

0
27.01.2020, 23:43

Теги

Похожие вопросы