
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:
mm
liegt zwischen 01 und 12. Dies muss eine zweistellige Ganzzahl sein.dd
geht 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 printf
zum Formatieren Ihrer Zahlen verwenden. Dabei %02d
steht 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 $h
Ihre 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}=i
ist falsch. Das $
Symbol wird vor einen Variablennamen gesetzt, um den Wert dieser Variable zu erhalten (in Ihrem Fall i
ist die Variable und $i
entspricht ihrem Wert). In Ihrem Fall hätten Sie also stattdessen geschrieben dd=$i
.