Пользователь ввел переменную даты от -1 до -5 дней в SOLARIS 10

В настоящее время я пытаюсь собрать сценарий, который может взять введенную пользователем дату и генерировать 5 предыдущих дней в качестве переменных, сохраняя при этом формат YYYYMMDD.

Версия, которую я использую-GNU bash, версия 3.2.52 (1)-release (i386-pc-solaris2.10) однако, похоже, администратор заблокировал использование GNU Util, поэтому команды «gdate» не могут быть использованы.

Я пытался использовать date-d, который является недопустимым. Кроме того, я пытался использовать Perl, но не мог понять, как манипулировать им в лучшем виде.

Сценарий, который у меня в настоящее время есть, можно увидеть ниже, но не возвращает окончательную дату.

#!/bin/bash
read -p "Enter the date (format = YYYYMMDD) : " Udate
echo $Udate
U2date=`TZ=GMT+24${Udate}'+%Y%m%d'`
echo $U2date

Я предполагаю, что если бы этот код работал, я бы просто увеличил +24 до +48 и так далее для дальнейших требуемых дат.

Извините, если это простая проблема, которую нужно решить, я совсем новичок в написании сценариев, и я учусь на ходу.

1 ответ

  1. Эхо » введите дату (YYYYMMDD):»
    читать Udate
    timestamp=perl -MTime::Local=timelocal -e '@t = unpack ("A4A2A2", $ARGV[0]); $t[1]--; print timelocal(1,1,1,reverse
    @t);' $Udate

    U2date=perl -MPOSIX=strftime -e 'print strftime("%Y%m%d", localtime($ARGV[0] -86400));' $timestamp
    U3date=perl -MPOSIX=strftime -e 'print strftime("%Y%m%d", localtime($ARGV[0] -172800));' $timestamp
    U4date=perl -MPOSIX=strftime -e 'print strftime("%Y%m%d", localtime($ARGV[0] -259200));' $timestamp
    U5date=perl -MPOSIX=strftime -e 'print strftime("%Y%m%d", localtime($ARGV[0] -345600));' $timestamp

    Для дальнейшей справки в случае, если у кого-то есть подобная проблема.