колотите парсинг даты оболочки, запуститесь с определенной даты и цикла в течение каждого дня в месяце

Я должен создать сценарий оболочки удара, запускающийся со дня и затем цикла в течение каждого последующего дня, форматируя, которые производят как %Y _ % m_d

Я полагаю, что могу отправить день запуска и затем другой параметрический усилитель для количества дней.

Моя проблема/вопрос - то, как назначить ДАТУ (который не является теперь), и затем добавьте день.

таким образом, мой вход был бы 2010_04_01 6

мой вывод был бы

2010_04_01
2010_04_02
2010_04_03
2010_04_04
2010_04_05
2010_04_06
12
задан Cœur 16 July 2017 в 06:28
поделиться

4 ответа

[radical@home ~]$ cat a.sh 
#!/bin/bash

START=`echo $1 | tr -d _`;

for (( c=0; c<$2; c++ ))
do
    echo -n "`date --date="$START +$c day" +%Y_%m_%d` ";
done

Теперь, если вы вызовете этот скрипт со своими параметрами, он вернет то, что вам нужно:

[radical@home ~]$ ./a.sh 2010_04_01 6
2010_04_01 2010_04_02 2010_04_03 2010_04_04 2010_04_05 2010_04_06
20
ответ дан 2 December 2019 в 03:38
поделиться

вы можете использовать gawk

#!/bin/bash

DATE=$1
num=$2
awk -vd="$DATE" -vn="$num" 'BEGIN{
   m=split(d,D,"_")
   t=mktime(D[1]" "D[2]" "D[3]" 00 00 00")
   print d
   for(i=1;i<=n;i++){
      t+=86400
      print strftime("%Y_%m_%d",t)
   }
}'

output

$ ./shell.sh 2010_04_01 6
2010_04_01
2010_04_02
2010_04_03
2010_04_04
2010_04_05
2010_04_06
2010_04_07
-1
ответ дан 2 December 2019 в 03:38
поделиться
#!/bin/bash
inputdate="${1//_/-}"  # change underscores into dashes
for ((i=0; i<$2; i++))
do
    date -d "$inputdate + $i day" "+%Y_%m_%d"
done
2
ответ дан 2 December 2019 в 03:38
поделиться

Вы можете передать дату с помощью параметра командной строки -d в GNU date, обрабатывающую несколько форматов ввода:

http://www.gnu.org/software/coreutils/manual/coreutils.html # Формат ввода даты

Передать дату начала в качестве аргумента командной строки или использовать текущую дату:

underscore_date=${1:-$(date +%y_%m_%d)}
date=${underscore_date//_/-}

for days in $(seq 0 6);do 
    date -d "$date + $days days" +%Y_%m_%d;
done
0
ответ дан 2 December 2019 в 03:38
поделиться
Другие вопросы по тегам:

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