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

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

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

  • mm01から12まで。 2桁の整数でなければなりません。

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

この問題を解決するために、if構造とループを使ってみました。同様のものを使用して${dd}ファイル名に適用できることを知っています。

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

関連情報