文字列を比較できません

文字列を比較できません

Googleは私を助けませんでした。

#!/bin/sh

j1=`expr "$1"`
j2=`expr "$2"`

while [ $j1 -le $j2 ]; do
    date=$(ncal -e $j1)
    month=$($date | cut -f1 -d' ')
    if [ $month=="April" ]; then
        echo $date
    fi
        j1=`expr $j1 + 1`
done

私は4月のイースターの日付を印刷したいと思います(パラメータとして渡された2年の範囲内で)。しかし、何とか出力を取得します。

...

April 5 2015
./script.sh: 8: March: not found
March 27 2016
./script.sh: 8: April: not found
April 16 2017

「月:見つかりません」とはどういう意味ですか? 4月だけリクエストしたのに3月はなぜ印刷されますか?

さまざまな方法を試しましたが、常にエラーが発生しました。

そして4月20日以降の日付だけを印刷する条件も追加しなければならないのですが、それも処理できませんね。

ベストアンサー1

オンライン

month=$($date | cut -f1 -d' ')

$dateコマンドに含まれるすべての項目を実行し、その出力をcut

私の考えでは、あなたが欲しいと思います。

month=$( printf '%s\n' "$date" | cut -f 1 -d ' ' )

ここで。

また、$(...)同じスクリプトにバックティックを混在させないでください。混乱を引き起こす可能性があります。ただ$(...)代わりに使用してください。

文字列比較は次のようにして行われます=

if [ "$month" = "April" ]; then

変数を二重引用符で囲む必要があります。バラよりbash / POSIXシェルで変数を引用することを忘れてしまうセキュリティリスク

を使用して整数演算を実行できます$(( expression ))exprすでに昔ながらです。

j1=$(( "$1" ))
j2=$(( "$2" ))

...

j1=$(( j1 + 1 ))

おすすめ記事