我需要创建一个以一天开始的bash shell脚本,然后循环每个后续日格式化输出为%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
答案 0 :(得分:20)
[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
现在,如果您使用params调用此脚本,它将返回您想要的内容:
[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
答案 1 :(得分:12)
非常基本的bash脚本应该能够做到这一点:
#!/bin/bash
start_date=20100501
num_days=5
for i in `seq 1 $num_days`
do
date=`date +%Y/%m/%d -d "${start_date}-${i} days"`
echo $date # Use this however you want!
done
输出:
2010/04/30
2010/04/29
2010/04/28
2010/04/27
2010/04/26
答案 2 :(得分:6)
注意:此处的任何解决方案都不适用于OS X.例如,您需要这样的内容:
日期-v-1d +%Y%m%d
昨天会为你打印出来。或者当然还有下划线:
日期-v-1d +%Y_%m_%d
因此,考虑到这一点,您应该能够使用此命令调整这些示例中的某些循环。 -v选项将允许您添加或减去天,分,秒,年,月等。-v + 24d将添加24天。等等。
答案 3 :(得分:2)
#!/bin/bash
inputdate="${1//_/-}" # change underscores into dashes
for ((i=0; i<$2; i++))
do
date -d "$inputdate + $i day" "+%Y_%m_%d"
done
答案 4 :(得分:1)
非常基本的bash脚本应该能够做到这一点。
剧本:
#!/ bin / bash
start_date = 20100501
num_days = 5
for seq 1 $num_days
中的我
做什么
date = date +%Y/%m/%d -d "${start_date}-${i} days"
echo $ date#使用你想要的!
完成
输出:
2010/04/30
2010/04/29
2010/04/28
2010/04/27
2010/04/26
答案 5 :(得分:1)
您也可以使用 cal ,例如
YYYY=2014; MM=02; for d in $(cal $MM $YYYY | grep "^ *[0-9]"); do DD=$(printf "%02d" $d); echo $YYYY$MM$DD; done
答案 6 :(得分:0)
您可以通过命令行选项 -d 将日期传递给处理多种输入格式的GNU日期:
http://www.gnu.org/software/coreutils/manual/coreutils.html#Date-input-formats
将开始日期作为命令行参数传递或使用当前日期:
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
答案 7 :(得分:-1)
你可以使用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)
}
}'
输出
$ ./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