2

この質問は、ここのスレッドに関連しています。

今日の日付からシェルスクリプトのX日を引いたもの

しかし、現在変数を操作しているので、別のスレッドを開始しました。

上記のように、今日の日付から200日を引いた値を取得する必要があります。年、月、日は別々の変数になります(この質問では、200を使用しますが、他の質問では222を使用します)。ただし、1月を0、2月を1(または01)、3月を2(または02)などと表す必要があります。これを試しました。

MONTHS200=$(date -j -v-200d -v-1m +"%m")
if ${MONTHS200}=01; then 
${MONTH200}=0
else ${MONTHS200}=${MONTH200}
fi

しかし、エラーが発生します./update_newdateformat.sh: line 20: 12=01: command not found ./update_newdateformat.sh: line 23: 12=: command not found-v-1m1月を除くすべての月で動作します。0ではなく12になるためです。

4

2 に答える 2

2

スクリプトですべての月の数値を1n下げる方法は次のとおりです。

MONTHS200=$(date -j -v-320d +"%m")

# Remove leading zero if there is one, so it doesn't cause problems later
MONTHS200=${MONTHS200#0}

MONTHS200=$((MONTHS200-1))

ifシェルでの構文と=(代入)構文の使用方法は次のとおりです。

if [[ "${MONTHS200}" == "01" ]]; then
    MONTHS200="0"
else
    MONTHS200=${AnotherVariable}
fi

数値比較には、以下を使用する必要があることに注意してください。

  • -eqそれ以外の==
  • -neそれ以外の!=
  • -ltそれ以外の<
  • -leそれ以外の<=
  • -gtそれ以外の>
  • -geそれ以外の>=

例えば:

 if [[ "${MONTHS200}" -eq 1 ]]; then 
于 2012-11-23T21:24:36.890 に答える
1

私はbash機能を利用します(OSX bashは十分最近のものだと思います-私は間違っているかもしれません)。dateあなたは一度だけ呼び出す必要があります

read year month day < <(date -j -v-200d +"%Y %m %d")
month=$(( 10#$month - 1 ))

bashにbase-10を使用させることで、8進数の問題を回避します

于 2012-11-24T01:24:54.393 に答える