关于if结构和循环的问题

关于if结构和循环的问题

我是使用 bash 脚本编程的新手。这是我的问题:我要打开一种文件名包含日期的数据(格式:)file_yyyymmddhh.nc。有一些要求:

  • mm从 01 到 12。这必须是两位整数。

  • 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表示一个两位整数,如果适用的话,带有前导零。

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.

相关内容