关于 if 和 then 的 bash 问题

关于 if 和 then 的 bash 问题

我正在我的剧本中写这个。它还有其他部分,但我只卡在这部分上。

if [[$# == $year $month $day  ]] ; then
    cal $day $month $year
fi

当我运行它时,它给我这个消息:

[[3: command not found

那么问题出在哪里呢?它是语法还是实际命令?

如果有帮助的话,这是我的脚本的其余部分:

year=$(echo "$year" | bc)
month=$(echo "$month" | bc)
day=$(echo "$day" | bc)

if [[$# == $year $month $day  ]] ; then    
    cal $day $month $year
fi

答案1

您需要在方括号后添加一个空格,[[

if [[ $# == $year $month $day ]] ; then    
    cal $day $month $year
fi

而且正如你所写的那样,这是行不通的。您将比较$#$year $month $day作为字符串,或者完全是其他东西。也许:

if [[ "$#" == "$year$month$day" ]] ; then    
    cal $day $month $year
fi

答案2

这方面存在不少问题。

  1. 后面需要一个空格[[

    [[ $# == $year $month $day ]]
    
  2. $#不是你想的那样。它是传递给脚本或函数的参数数量。看起来您认为这实际上是参数列表。

  3. ==比较字符串,你给它一个排序列表。要将传递给脚本的参数列表与 进行比较$day $month $year,您可以执行以下操作:

    [[ "$@" == "$day $month $year" ]]
    
  4. cal不是这样的。我的cal不是这样工作的,但是显然一些较新的版本可以。我不知道你实际上想做什么,但它不会起作用。您也许正在寻找date -d "$day/$month/$year"?例如

    $ date -d "08/10/2014"
    Sun Aug 10 00:00:00 CEST 2014
    

    或者,如果您想显示特定月份的日历:

    $ cal 10 2014
        October 2014      
    Su Mo Tu We Th Fr Sa  
              1  2  3  4  
     5  6  7  8  9 10 11  
    12 13 14 15 16 17 18  
    19 20 21 22 23 24 25  
    26 27 28 29 30 31     
    

相关内容