if構造とループに関する質問

if構造とループに関する質問

私は bash スクリプトを使ったプログラミングの初心者です。問題は次のとおりです。ファイル名に日付 (形式: file_yyyymmddhh.nc) が含まれるデータを開く必要があります。いくつかの要件があります。

  • mm01 から 12 までです。これは 2 桁の整数である必要があります。

  • dd月によって 01 から 28、30、または 31 までになります。

${dd}私は if 構造とループを使ってこの問題を解決しようとしました。ファイル名に適用できるように、このようなものを使用できることはわかっています。

if [${mm} == 01] ; then 
  for ((i=1; i<=31; i=i+1))
  do 
    ${dd}=i
done
fi

${dd}しかし、特に の場合に 2 桁の整数を指定する方法がわかりません${dd} <= 9。上記のコードを修正する方法はありますか?

答え1

printf数値の書式設定に を使用できます。ここで は%02d、適切な場合は先頭にゼロが付いた 2 桁の整数を表します。

dd=$(printf "%02d" $i)

これを拡張して$y、、、$mに年、月、日、時間の数字が含まれている場合、構造は次のようになります$d$h

file=$(printf "file_%04d%02d%02d%02d.nc" $y $m $d $h)

ここで、あなたの構文${dd}=iは間違っています。$シンボルは、その変数の値を取得するために変数名の前に付けられます (あなたの場合、iは変数であり、$iはその値に相当します)。したがって、あなたの場合は、 と書くことになりますdd=$i

関連情報