2

这个问题与这里的线程有关:

今天的日期,减去 shell 脚本中的 X 天

但是因为我现在正在操作变量,所以我启动了另一个线程。

如上所述,我需要将今天的日期减去 200 天,并将年、月和日放在单独的变量中(在这个问题中,我将使用 200,尽管在另一个问题中是 222)。但是,我需要将一月表示为 0,二月表示为 1(或 01),三月表示为 2(或 02),等等......我试过这个:

MONTHS200=$(date -j -v-200d -v-1m +"%m")
if ${MONTHS200}=01; then 
${MONTH200}=0
else ${MONTHS200}=${MONTH200}
fi

但我收到错误./update_newdateformat.sh: line 20: 12=01: command not found ./update_newdateformat.sh: line 23: 12=: command not foundThe -v-1mworks for all months except 一月,因为它变为 12,而不是 0

4

2 回答 2

2

以下是如何将所有月份数字向下移动 1 n 您的脚本:

MONTHS200=$(date -j -v-320d +"%m")

# Remove leading zero if there is one, so it doesn't cause problems later
MONTHS200=${MONTHS200#0}

MONTHS200=$((MONTHS200-1))

以下是如何在 shell 中使用if=(赋值)语法:

if [[ "${MONTHS200}" == "01" ]]; then
    MONTHS200="0"
else
    MONTHS200=${AnotherVariable}
fi

请注意,对于数值比较,您需要使用:

  • -eq代替==
  • -ne代替!=
  • -lt代替<
  • -le代替<=
  • -gt代替>
  • -ge代替>=

例如:

 if [[ "${MONTHS200}" -eq 1 ]]; then 
于 2012-11-23T21:24:36.890 回答
1

我会利用 bash 功能(我假设 OSX bash 已经足够新了——我可能错了)。您只需拨打date一次

read year month day < <(date -j -v-200d +"%Y %m %d")
month=$(( 10#$month - 1 ))

您可以通过强制 bash 使用 base-10 来避免八进制问题

于 2012-11-24T01:24:54.393 回答