본문 바로가기

연구개발/Linux

[UNIX/LINUX] Shell Script 기본 - 3.for문 (2) 예제

728x90
반응형

안녕하세요, 박현명입니다..

 

이번 글은 지난 글에서 설명 드렸던 for문을 이용한 예제 스크립트를 보여 드리고 for문에 대해서 좀 더 이해할 수 있는 시간을 갖도록 하겠습니다..

 

먼저 예제 스크립트 전문입니다..

#!/bin/sh

if [ -d $1 ]; then

        cd $1


        if [ -f $2 -a -s $2 ]; then


                echo $2' is file and has contents more than one character.'

 

                array=`cat $1/$2`

 

                for day in ${array}; do

                    if [ -n ${day} ]; then

                        if [ ${day} == "Fri" -o ${day} == "Sat" ]; then

                            echo ${day}' is very happy day!!'
                        else
                            echo ${day}' is gloomy day.'

                        fi
                    fi

                done


        else
                echo $2' is not file or has zero character.'
        fi

fi

앞서 if문 예제 글에서 보여 드렸던 예제 스크립트보단 짧은 스크립트이지만 설명의 편의를 위해 크게 if문과 for문으로 나누어 설명 드리도록 하겠습니다..

 

1) 첫 번째 섹션 - if문

if [ -d $1 ]; then                             // 첫 번째 매개변수 값이 디렉토리라면,

        cd $1                                     // 해당 디렉토리로 이동


        if [ -f $2 -a -s $2 ]; then        // 두 번째 매개변수 값이 파일(-f)이고 그 파일이 내용을 가지고 있다면(-s),


                echo $2' is file and has contents more than one character.'

 

                array=`cat $1/$2`       // array라는 변수에 두 번째 매개변수인 파일에서 읽어들인 내용을 할당

 

                for day in ${array}; do      // for문 시작

                    ~

                done                                  // for문 종료


        else                     // 두 번째 매개변수 값이 파일이 아니거나 그 파일이 아무런 내용도 가지고 있지 않다면,
                echo $2' is not file or has zero character.'
        fi

fi

라인별 설명은 위 내용을 참조하시면 되겠고,

 

if문의 내용을 한 문장으로 표현하자면,

 

두 번째 매개변수 값이 파일이고 내용을 가지고 있을 경우엔 for문을 실행시켜 원하는 결과를 얻을 것이고, 그렇지 않다면 echo로 그에 대한 내용만 화면에 보여주겠다는 것입니다..

 

if문과 관련해선 앞선 글들에서 자세히 설명해 놓았으니 참고하시면 될 것 같습니다..

 

2) 두 번째 섹션 - for문

for day in ${array}; do

    if [ -n ${day} ]; then

        if [ ${day} == "Fri" -o ${day} == "Sat" ]; then

            echo ${day}' is very happy day!!'
        else
            echo ${day}' is gloomy day.'

        fi
    fi

done

array라는 변수에 할당된 값이 파일이고 내용을 가지고 있다는 if문을 통과하였다면 for문을 실행하겠죠?

 

그렇다면 이 array 변수를 for문에 집어넣고 이제 띄어쓰기 단위로 구분된 단어 하나하나를 끄집어 내어 day라는 변수에 할당합니다..

 

if문 안의 -n 옵션은 변수의 내용이 null이 아닌지를 판별하는 옵션이므로 day에 할당된 변수값이 null일 경우, 즉 파일의 끝에 도달했을 경우에는 if문을 실행하지 않겠죠..

 

그 다음 if문은 굳이 설명 드리지 않아도 아실 거라 생각됩니다..

 

물론 위 스크립트를 실행시키려면 다음과 같은 샘플 파일이 OS 디렉토리 어딘가에 존재해야만 스크립트 실행 시 매개변수로 넣어줄 수 있겠죠..

# cat /tmp/test.txt

Sun Mon Tue Wen Thu Fri Sat

그리고 다음과 같이 실행시키시면 됩니다..

./ForTest.sh /tmp ForTestResult.txt

이상 for문에 대한 간단한 예제였습니다..

 

감사합니다..


728x90
반응형