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     
    

関連情報