FIF's 코딩팩토리

리눅스 BASH Shell 프로그래밍 기초(3) 본문

Linux(리눅스)

리눅스 BASH Shell 프로그래밍 기초(3)

FIF 2019. 6. 21. 09:23
반응형

6. 조건문

조건문은 어떤 일을 수행하는가 혹은 하지 않는가의 문제를 표현하기 위한 방법이다.


6.1. 요점만 말하자면

조건문은 다양한 형식으로 표현할 수 있지만 가장 대중적으로 사용하는 것은 다음과 같은 형식이다.

if expression then statement

'statement'는 'expression'에 해당하는 조건이 충족되었을 때만 실행된다. C언어 책 사서 첫 장만 보고 손 안댄 분이라 할지라도 구경해 보셨을 만한 형식이다.

조건문의 형식 중에는 다음과 같은 것도 있다.

if expression then statement1 else statement2.

이것 역시 많이들 보신 형태이겠지만, 'expression'에 해당하는 조건이 충족되면 'statement1'이 실행되고, 그렇지 않으면 'statement2'가 실행되는 방식이다.

앞서 말한 것 보다 조금 더 진화된 형태를 살펴보자면 다음과 같다. if expression1 then statement1 else if expression2 then statement2 else statement3. 이 방식에서도 'expression1'을 충족하면 'statement1'이 실행된다는 점에서는 앞서 살펴본 예와 같다. 그러나 'expression1'이 충족되지 않을 경우에는 'expression2'라는 새로운 조건이 나타난다. 만일 이렇게 'expression2'와 비교하여 조건을 충족하면 statement2'가 실행되지만 그렇지 않을 경우에는 'statement3'이 실행된다. 이 과정은 'else if'라는 녀석을 이용하는데, 'else if'를 얼마든지 추가하여 다양한 분기를 만들 수 있다.

간단한 문법 형식을 보도록 하자.

bash에서 if를 사용할 때에는 다음과 같은 형식으로 작성한다.

if [expression];

then

('expression'이 참일때 실행할 코드 )

fi


6.2. 예제 : 단순한 if - then 조건문

 

#!/bin/bash

if [ "foo" = "foo" ]; then

echo expression evaluated as true

fi

이 코드는 if 뒤에 나온 조건이 참일때 'expression evaluated as true' 라는 문장을 출력하는 내용이다. 보면 알겠지만 조건 뒤에는 'then'이라고 적혀있고, 조건이 참일때 실행할 내용을 적은 뒤에는 'fi'라고 적어 조건문이 끝났음을 알려준다.


6.3. 예제 : 단순한 if-then-else 조건문

 

#!/bin/bash

if [ "foo" = "foo" ]; then

echo expression evaluated as true

else

echo expression evaluated as false

fi


6.4. 예제 : 변수를 사용하여

 

#!/bin/bash

T1="foo"

T2="bar"

if [ "$T1" = "$T2" ]; then

echo expression evaluated as true

else

echo expression evaluated as false

fi


7. for, while, until을 사용하는 순환문

여기에서는 for, while, until을 사용한 순환문에 대해 알아보겠다.

for를 사용한 순환문의 경우 일반적인 프로그래밍 언어를 사용할 때와 좀 다른 점이 있다. 예컨대 문자열에서의 각 단어를 지나쳐가며 문자열이 끝날 때 까지 루프를 사용할 수도 있다.

while의 조건이 참인 동안에는 계속 루프 안의 명령이 동작한다. 하지만 조건이 거짓인 경우 루프는 바로 중지되고 루프 밖의 코드를 실행하는 것이다.

until도 따지고 보면 같은 맥락이기는 하지만, 이 경우에는 조건이 거짓인 동안 루프가 동작한다는 점이 다르다.

물론 사용하는 사람 입장에서는 while이나 until이나 경우에 따라 편하게 써 주면 되는 것이다. ^^


7.1. 예제 : for

 

#!/bin/bash

for i in $( ls ); do

echo item: $i

done

두 번째 줄에서 특이한 변수를 하나 볼 수 있다. 이것은 ls의 실행 결과를 통째로 변수로 받고 있다. 여기에서 $i는 ls 의 실행 결과를 순서대로 한 단어씩 받는다.

세 번째 줄은 루프가 진행되는 동안 실행할 내용이다. 여기에서는 한 줄 짜리로 되어 있지만 필요에 따라 몇 줄이고 추가할 수 있다. 얼마든지 추가한 다음, 마지막 내용의 다음 줄에 done을 입력하여 루프가 끝이라고 알려 주면 된다.

마지막 줄의 'done'은, $i가 지금 받아서 사용한 변수는 폐기하고 새로운 변수를 받아야 한다는 뜻이다. done 이전에 있던 내용은 실행되었고, 이제 다시 새 변수를 넣어 같은 내용을 진행할 것이다.

이 스크립트는 정말 단순하기 짝이 없지만, 루프에 대해 필요한 내용은 다 구색이 갖춰져 있다. 이 내용만 제대로 이해해도 기본적으로 루프를 사용하는 데에는 어려움이 없을 것이다.


7.2. 예제 : C언어 방식으로 사용하는 for

이런 방식으로 사용하는 for도 한번 생각해 보자. 이것은 C나 Perl에서 사용하는 방식과 비슷한 구석이 많다.

 

#!/bin/bash

for i in `seq 1 10`;

do

echo $i

done


7.3. 예제 : while

 

#!/bin/bash

COUNTER=0

while [ $COUNTER -lt 10 ]; do

echo The counter is $COUNTER

let COUNTER=COUNTER+1

done

이 스크립트는 C나 파스칼, Perl 등의 유명한 언어에서 사용하는 방식을 흉내내고 있다.


7.4. 예제.... 하나 더!

 

#!/bin/bash

COUNTER=20

until [ $COUNTER -lt 10 ]; do

echo COUNTER $COUNTER

let COUNTER-=1

done

 

반응형
Comments