Немного поигравшись с командой date
, я пришел к решению, приведенному ниже.Дата, которую вы указываете с помощью переключателя -d
- это то, что date
не интерпретируется как yyyymmddhh
, как вам бы этого хотелось.
Итак, вот решение с ручным разбором даты.
#!/bin/sh
now=2018100600
end=2018100604
nowY=$(expr "$now" : "\([[:digit:]]\{4\}\)")
nowM=$(expr "$now" : "[[:digit:]]\{4\}\([[:digit:]]\{2\}\)")
nowD=$(expr "$now" : "[[:digit:]]\{4\}[[:digit:]]\{2\}\([[:digit:]]\{2\}\)")
nowH=$(expr "$now" : "[[:digit:]]\{4\}[[:digit:]]\{2\}[[:digit:]]\{2\}\([[:digit:]]\{2\}\)")
h_counter="$nowH"
((h_counter++))
date_runner=""
while true ; do
date_runner=$(date -d "$nowY$nowM$nowD + $h_counter hours" +"%Y%m%d%H")
echo $date_runner
((h_counter++))
[ "$date_runner" == "$end" ] && break
done
Хотя я действительно считаю, что «лучше всего указывать даты в формате GNU только в формате ГГГГ-мм-дд ЧЧ-ММ-СС»«Совет @Kamil Cuk - это путь.