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}특히 ${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.

관련 정보