반달가면 이글루에서 백업 - 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 보다 이쪽이 더 보기에도 수정하기에도 편해서 조건이 많을 때는 이런 방식으로 사용하고 있다.
'bash script' 카테고리의 다른 글
[bash: sed] 문자열 대체 명령 여러개를 파일에 저장해서 활용하기 (0) | 2023.08.29 |
---|---|
[bash: ((] 연관 배열(associative array)에 저장된 정수 계산 (0) | 2023.08.29 |
리눅스 bash 스크립트에서 연관 배열(associative array) 사용하기 (0) | 2023.08.23 |
[bash: curl] curl을 이용한 FTP 자동 접속 - 파일명 변경 (0) | 2023.08.23 |
[bash: sed] 16진수값(hex) 대체하기 (0) | 2023.08.23 |