Frage zur if-Struktur und zu Schleifen

Frage zur if-Struktur und zu Schleifen

Ich bin neu in der Programmierung mit Bash-Skripten. Hier ist mein Problem: Ich möchte eine Art von Daten öffnen, deren Dateiname das Datum enthält (Format: file_yyyymmddhh.nc). Es gibt einige Anforderungen:

  • mmliegt zwischen 01 und 12. Dies muss eine zweistellige Ganzzahl sein.

  • ddgeht von 01 bis 28, 30 oder 31, abhängig vom aktuellen Monat.

Ich habe versucht, das Problem mit einer if-Struktur und Schleifen zu lösen. Ich weiß, dass ich so etwas verwenden könnte, damit ich es ${dd}auf meinen Dateinamen anwenden kann.

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

Aber ich weiß nicht, wie ich angeben soll, ${dd}dass es sich um eine zweistellige Ganzzahl handelt, insbesondere wenn ${dd} <= 9. Gibt es eine Möglichkeit, den obigen Code zu korrigieren?

Antwort1

Sie können printfzum Formatieren Ihrer Zahlen verwenden. Dabei %02dsteht das für eine zweistellige Ganzzahl mit führenden Nullen, falls angemessen.

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

Sie können dies erweitern, sodass, wenn $y, $m, $d, und $hIhre Jahres-, Monats-, Tages- und Stundenzahlen enthalten, die Konstruktion folgendermaßen aussehen könnte

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

Und wenn wir schon dabei sind: Ihre Konstruktion ${dd}=iist falsch. Das $Symbol wird vor einen Variablennamen gesetzt, um den Wert dieser Variable zu erhalten (in Ihrem Fall iist die Variable und $ientspricht ihrem Wert). In Ihrem Fall hätten Sie also stattdessen geschrieben dd=$i.

verwandte Informationen