i=0
while case $((i+=1)) in
([6-9])
echo "$i";;
(??)
! echo "$i"
esac
do :; done
Suponiendo que la zona horaria esté configurada correctamente y la fecha GNU, puede obtener la marca de tiempo de Unix, restar, agregar 60 minutos y volver a convertirla al formato necesario:
$ ts=$(date -d "2018-05-16 21:30:00" +%s) # For BSD date: date -jf "%F %T" "2018-05-16 21:30:00" +%s
$ echo "$(date -d@$((ts - 3600)) +"%F %T")"
2018-05-16 20:30:00
$ echo "$(date -d@$((ts + 3600)) +"%F %T")"
2018-05-16 22:30:00
... Creo que esto no tiene en cuenta correctamente los segundos intercalares y varios otros problemas que todo programador debería saber sobre el tiempo .