【问题标题】:`elif' unexpected.. for Date function'elif' 出乎意料.. 用于日期函数
【发布时间】:2015-05-25 14:00:20
【问题描述】:

这是我的代码

CURR_MNTH=$(date +'%m' -d 'now')

if [$CURR_MNTH < 04]
    THIS_QTR=1
elif [$CURR_MNTH < 07] && [$CURR_MNTH > 03]
    THIS_QTR=2
elif [$CURR_MNTH < 10] && [$CURR_MNTH > 07]
    THIS_QTR=3
elif [$CURR_MNTH > 09]
    THIS_QTR=4
fi

echo $THIS_QTR

我正在尝试使用上述逻辑获取当前季度,但提示说我有 `elif' 意外错误.. 有人可以帮助我

【问题讨论】:

  • #!/bin/ksh 我正在使用 k-shell
  • 临时更改为#!/bin/bash,您将从shellcheck.net 获得正确的指导。祝你好运。

标签: linux shell ksh


【解决方案1】:

如果你使用 Bash,会有很多错误:

  • if 语句后没有分号;
  • 括号和条件表达式之间没有空格;
  • 连词应放在同一组括号内;
  • 考虑使用-lt-gt 进行值测试。

正确的代码如下所示:

CURR_MNTH=$(date +'%m' -d 'now')

if [[ $CURR_MNTH -lt 4 ]]; then
    THIS_QTR=1
elif [[ $CURR_MNTH -lt 7 && $CURR_MNTH -gt 3 ]]; then
    THIS_QTR=2
elif [[ $CURR_MNTH -lt 10 && $CURR_MNTH -gt 7 ]]; then
    THIS_QTR=3
elif [[ $CURR_MNTH -gt 9 ]]; then
    THIS_QTR=4
fi

echo $THIS_QTR

考虑下次在您的代码上运行http://www.shellcheck.net/

【讨论】:

    【解决方案2】:

    您可以通过公式从月份中获取季度:

    THIS_QTR=$(( 1 + (10#$CURR_MNTH - 1) / 3))
    

    10# 前缀表示十进制数,从而防止前导 0 被解释为八进制数指示符。

    【讨论】:

    • 运行命令后我得到 1,但应该是 2
    • @Dileep:我用for CURR_MNTH in {0{1..9},1{0..2}} ; do echo $CURR_MNTH $(( 1 + (10#$CURR_MNTH - 1) / 3)) ; done 对其进行了测试。 (请注意,您的代码没有给出07 的答案)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 2014-09-11
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    相关资源
    最近更新 更多