bash script2023. 8. 29. 08:50

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/609079

case 조건문을 사용하기 어려운 복잡한 여러개의 조건에 따라 뭔가 작업을 한 후에 공통된 작업이 있는 경우 어떻게 할 것인가에 대한 문제다. 하나의 변수에 대하여 여러 조건에 따라 작업을 하는 경우에는 case로 하면 되지만 변수가 다수일 경우에는 if와 elif를 계속 나열해야 하는 귀찮음이 생긴다. (case에 대한 내용은 이전 게시물을 참고하자. 여기로)

 

간단한 예시를 생각해 보자. 앞에서 있었던 작업에 의해 두가지 변수 a, b의 값이 설정되는데 먼저 a에 대해 우선적으로 특정 조건을 만족하는지 보고 만족하지 않을 경우 b에 대해 특정 조건을 만족하는지 봐야 하는 경우다.

# 변수 a의 값이 0이거나, 또는 변수 b의 값이 1인 경우에 따라 변수 c의 값을 설정
if [[ $a -eq 0 ]]
  then c="abc"
elif [[ $b -eq 1 ]]
  then c="def"
fi
echo "$c"

변수가 두개라면 큰 문제 없으나, 너댓개 이상 많아질 경우에는 보기가 좀 복잡해 진다. 개인적으로 이런 경우에 while과 if 조건문을 조합해서 사용하고 있다. 아래와 같은 형태다.

while [[ 1 ]]
do
  # 변수 a 확인
  if [[ $a -eq 0 ]]
    then c="abc"
    break
  fi
  # 변수 b 확인
  if [[ $b -eq 1 ]]
    then c="def"
    break
  fi
  # 조건에 맞는 경우 없음
  echo "오류: 맞는 조건이 없습니다!"
  break
done
echo "$c"

while을 이용해서 무한 루프를 만들고 그 안에 각 if 조건문을 넣는 형태로, 조건이 맞으면 break문으로 루프를 빠져나가는 식이다. 개인 취향일 수도 있는데, if/elif 보다 이쪽이 더 보기에도 수정하기에도 편해서 조건이 많을 때는 이런 방식으로 사용하고 있다.

728x90
Posted by 반달가면