#!/bin/sh
after=$(date - date "today - $(date +% d) days" +%Y-%m-%d)
now=$(date +%Y%m01)
sed -i 's/20180301/'$now'/g' hyb.txt;
sed -i 's/2018-02-28/'$after'/g' hyb.txt;
如何将变量分配给我的日期 20180301 和 2018-02-28 的格式,以便不再像我在脚本中那样将它们放入。
答案1
假设我在上面评论中的假设是正确的:
# "now" == first day of this month: format YYYYmmdd
now=$( date "+%Y%m01" )
# "after" == last day of previous month: format YYYY-mm-dd
after=$( date -d "$now - 1 day" "+%Y-%m-%d" )
echo "now=$now" # now=20190901
echo "after=$after" # after=2019-08-31
答案2
这应该有帮助:
#!/bin/sh
file=hyb.txt
nowfile=${1:-20180301}
afterfile="${2:-"$(date -d "$nowfile -1 day" +"%Y-%m-%d")"}"
now=$(date +%Y%m01)
after=$(date -d "$now -1 days" +%Y-%m-%d)
echo sed -i 's/'"$nowfile"'/'"$now"'/g' "$file";
echo sed -i 's/'"$afterfile"'/'"$after"'/g' "$file";
该脚本需要参数。
参数 1 是now
文件内需要更改的值。如果未给出参数 1,则默认为20180301
。
参数 2 是after
文件 ( afterfile
) 内要更改的值。如果未给出,则根据now
文件 ( ) 内部的值计算该值nowfile
。
调用该脚本./script 20180301 2018-02-28
作为您的原始脚本。
调用./script 20180901
(无第二个参数)让脚本计算新afterfile
值(结果为20180831
)。
如果计算出的值符合您的需要,请删除echo
sed 之前的两个值以使脚本处理该文件。