3. OS이야기/03. Shell Script

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

알 수 없는 사용자 2014. 4. 29. 14:09

#!/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문에 대한 간단한 예제였습니다.