因此,在工作中我们使用会计系统,在月末我们必须修改上个月的脚本,并为打印出来的日志指定新名称。因为我很懒,宁愿花时间学习新东西而不是重复同样的任务,我决定编写脚本来为我做这一切并将其设置为cron工作。因为我刚刚开始这项工作,而且我是Bash编程的新手,所以我决定稍微研究一下,找到完成这项工作所需的一切,然后想出来。
#!/bin/bash
month= $(echo $(date --date="last month" +%b))
year=$(echo $(date +%Y))
echo $(date --date="last month" +%Y-%m-%d)
echo $(date --date="yesterday" +%Y-%m-%d)
echo $(date --date="last month" +%b)
echo garuda-summary-$month$year.log;
并打印出此
test.sh: line 2: Apr: command not found
2011-04-02
2011-05-01
Apr
computer-summary-2011.log
所以我玩了一些,并让这个工作。但它很难看,我想知道它为什么以前不起作用。谢谢你
#!/bin/bash
month= $(echo $(date --date="last month" +%b))
year=$(echo $(date +%Y))
echo $(date --date="last month" +%Y-%m-%d)
echo $(date --date="yesterday" +%Y-%m-%d)
echo $(date --date="last month" +%b)
echo garuda-summary-$(date --date="last month" +%b)$year.log;
答案 0 :(得分:5)
test.sh: line 2: Apr: command not found
是因为在分配到月份时“=”后面有空格。这个空间让bash认为4月($(日期 - 日期 - 日期=“上个月”+%b))的输出是你要调用的命令。
这也会导致未在shell中设置月份,因为在与变量赋值相同的行上指定命令会告诉bash仅在调用指定命令时使用此变量值。
答案 1 :(得分:1)
首先,您不需要通过echo在子shell中执行所有操作。这应该是等效的,更容易使用:
#!/bin/bash
month=`date --date="last month" +%b`
year=`date +%Y`
date --date="last month" +%Y-%m-%d
date --date="yesterday" +%Y-%m-%d
date --date="last month" +%b
echo garuda-summary-$month$year.log
答案 2 :(得分:1)
您可以通过以下方式免除$( ...)
内容:
year=`date +%Y`
month=`date --date='last month'`
等等,这应该会在一定程度上改善易读性。
同样,您可能想要检查当前月份是任何一年的月份时会发生什么。您将为您的日期生成“2011年12月”,而不是“2010年12月”。