【问题标题】:How to list date of every monday and thrusdays in shell scripting?如何在 shell 脚本中列出每个星期一和星期四的日期?
【发布时间】:2014-01-27 14:11:51
【问题描述】:

如果我将月份和年份作为输入,则输出应该是该月的星期一和星期四的日期。

例如:如果输入是 年份 = 2013 月 = 02 输出应该是

2013-02-04 
2013-02-07 
2013-02-11 
2013-02-14
2013-02-18
2013-02-21 
2013-02-25
2013-02-28

如何在 shell 脚本中使用 date 函数?

【问题讨论】:

    标签: shell date unix scripting


    【解决方案1】:

    这个方法只需要2次调用date,其余的只是算术

    year=2013
    month=2
    last=$(date -d "$year-$month-1 + 1 month - 1 day" +%d)
    wday=$(date -d "$year-$month-1" +%w)
    for (( day=1; day<=$last; day++ )); do
        if (( wday == 1 || wday == 4 )); then
            printf "%4d-%02d-%02d\n" $year $month $day
        fi
        (( wday = (wday + 1) % 7 ))
    done
    
    2013-02-04
    2013-02-07
    2013-02-11
    2013-02-14
    2013-02-18
    2013-02-21
    2013-02-25
    2013-02-28
    

    【讨论】:

      【解决方案2】:
      year=2013
      month=02
      
      #Monday=1,Sunday=7
      display_days="1 4"
      
      for day in $(seq 1 31)
      do
          dow=$(date -d "$year-$month-$day" +%u 2>/dev/null)
          for d in $display_days
          do
                  if [ -z $dow ]; then continue; fi
                  if [ "$dow" -eq "$d" ]
                  then
                          date -d "$year-$month-$day" +%y-%m-%d
                  fi
          done
      done
      

      【讨论】:

        【解决方案3】:

        或者只是听从ncal

        LC_ALL=C ncal "$@" | sed -n 's/\(Mo\|Th\)//p'
        

        工作日需要本地化,所以我添加了一个 C 语言环境以防万一。

        【讨论】:

          【解决方案4】:

          另一种方式:

          year=2013 month=02
          cal $month $year |  
          sed '1,2d; s/^.. \(..\) .. .. \(..\).*/\1\n\2/' | 
          sed "/^ *$/d; s/^ /0/; s/^/$year-$month-/"
          

          【讨论】:

            猜你喜欢
            • 2014-02-23
            • 1970-01-01
            • 1970-01-01
            • 2016-01-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-02
            相关资源
            最近更新 更多