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 ))