if 구조와 루프에 관한 질문

if 구조와 루프에 관한 질문

저는 bash 스크립트를 사용한 프로그래밍이 처음입니다. 내 문제는 다음과 같습니다. 파일 이름에 날짜(형식: )가 포함된 데이터 유형을 열고 싶습니다 file_yyyymmddhh.nc. 몇 가지 요구 사항이 있습니다.

  • mm01부터 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해당되는 경우 앞에 0이 붙는 두 자리 정수를 나타냅니다.

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.

관련 정보