關於 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     
    

相關內容