강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

[연재잡담-03] NAZU의 Codeless Bash Script (고급편2:의심) (GPL)

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문


[연재잡담-03] NAZU의 Codeless Bash Script (고급편2:의심) (GPL)

여러분 그동안 안녕하셨습니까?
NAZU가 잠시 쬐끔 게을러졌습니다. -_-a
일주일전에 써놨는데 고민 좀한다고 안올렸던것 같네요.. -_-a
고민이 뭔지는 비밀입니다.
(방화벽 설치했습니다. 자신있으신분 뚫어보시길..ㅋㄷ)

암튼 오늘은 bash 뚫고 퓨처를 해보고자 합니다.

=================================================================
1. 의미심장한 주접?
=================================================================

금일의 잡담으로는 Bash Script Coding기법을 보시게 될것입니다.
즉, 군대가기전(개판되기전) 코더로써의 코딩을 보여드리고자 합니다.

으미..또..군대나와부렸네..미챠~~~
왜? 냐구 물으신다면, 군대서 안좋은 추억이 있는지라, 플러스~~
부대의 착오와 사정으로 예비군이 이번달에 4번이나 밀렸습니다.

1) 입소 하루전에 3일후로 밀렸다고 문자보내덥니다.
(이때 진짠가 싶어서 부대전화걸어봤는데 30분동안 통화중)
(그 30분후엔 아예 전화를 안받덥니다. -_-)
누가 수류탄 깠나보다 했죠 뭐..
근데 알고보니 그게 아니더군요..
(전쟁안나니 군생활 참 편한가봅니다. 장난문자라나..)

2) 원래의 입소 당일날(즉, 그 다음날) 8시 47분에 문자가 왔습니다.
어제 보낸 문자 잘못 보낸거라고..9시까지 입소하라고..
그래서 전화를 했지요, 가는 시간 좀 걸릴꺼라 늦을수 밖에없다고..
무조건 9시 30분까지는 입소를 해야한답니다.
(30분 차이는 아마도 코리아타임 적용?!인가봅니다.)
요즘 군바리는 민간인(예비군)이 5대긴줄 압니다.
화는 났지만, 군생활을 해봤기에 대강 웃어넘기면서,
4월 10일로 일자를 변경했습니다.
근데, 정작 열받는 이유는, 미안하다는 말한마디 안합니다.
역시 군생활끝날때까지 무개념일듯 싶습니다.
(질문! 요즘 군대는 코리아타임도 적용합니까?)
(전쟁안나니 군생활 참 편한가봅니다.)

3) 얼마후 또 전화가 왔습니다.
4월 11일로 옮기자고.. -_-a 당일날 훈련받는사람이 적다고..
이제는 그냥 지네편한대로 한답니다.

그러려니 했습니다. 니네가 하는게 다 그렇지뭐~!
그리고 물었습니다. 이젠 더이상 안미뤄 질꺼죠?
물론 대답은 Yes 였습니다. -_-a
그나마 이때는 좀 미안했나봅니다. 목소리가 기어들어갔으니..
(이때까진 참 잘참은 듯 합니다.)

4) 그리고 얼마후 또 전화가 왔습니다.
4월 12일로 옮겨졌답니다. -_-a 이쯤되면 대략 미칩니다.
그동안 쌓인게 많았는지라, 아토즈(a to z) 탈라다가,
위에서 시켜서 그러는거 아니깐 딱 몇마디했습니다.

5) 혹시 다음에 전화온다면 이글을 에디팅할지도..;;
다음엔 꼭 재때 훈련받을 수 있기를 기원하며..

- 원래 NAZU는 군대이야기는 잘 안합니다.
(현역이고 전방이라는거 빼고.. 거의 안합니다..)
- 그리고 NAZU는 축구이야기도 잘 안합니다.
(월드컵 시즌때만 반짝합니다. 축구보단 농구를 좋아해서리..)
- 가장 중요한건, 절대로 군대에서 축구한 이야기 안합니다. ㅡㅡv
(그런데, 왜 -_-a 쏠론지 저도 모르겠습니다.)
(자기하기엔 아니고, 남주기엔 아깝다라 뭐라나.. -_-;; 욕심쟁이덜~)

자, 윗글을 보신분들 ^^
NAZU가 왜 저런 이야기 했을까요?
단순히 군대때문은 아니겠지요^^? 단순한 잡담도 아닐테고..

제 글을 그저 단순하게 보시는 분들은
보통 깊은 내면을 이해를 못하시지요..
가끔은 상상력을 발휘해 보심도 옳은줄로 아뢰옵니다.
(물론 어릴때 시쓰던 놈인지라, 돌려이야기하는걸 좋아합니다.)

여러분의 생활, 여러분의 주위분들과 잘 맵핑(전문용어죠^^?) 시켜보세요.
그리고 반성하는 계기를 가졌으면 합니다. (저도 마찬가지고요 ^^;;)

=================================================================
2. 사전 준비에서 최종 설명서 산출까지
=================================================================

자~ 그럼.. NAZU의 Bash Script Code를 살펴보도록 합시다
라고 말씀드리고 싶지만, 제목을 잘 보셔야죠~
뭐라고 적혀있습니까^^?

"사전 준비에서 최종 설명서 산출까지"

누구나 다 아는 겁니다. 누구나 다 쉽게 이야기 하지요, 하지만,
지키는 사람 거의 없습니다. (0.1%정도 겨우 지킬까말까한다는데..)

제가 하는(군대가기전까지 하던) 방식은 다음과 같습니다.

사전 준비(Not a Dictionary : 그 사전이 아닙니다.)부터,
최종 설명서 산출 단계까지 10를 거칩니다.

01. 요구사항 분석(이라는 전문용어를 쓰더군요..)
    사용자가 필요로하는 것이 무엇인가?

02. 제작방법 구성도 생성
    머릿속으로 샤샤샥하며 그려 봅니다.
    (당시엔 지금보다 기억력이 엄청 좋았기에..)
    (요즘은 그려도 잘안됩니다.ㅠㅠ)

03. 스크립트 작성 시작
    우선 주요 테스트 스크립트를 짜보고, 가능성을 점칩니다.
    그후, 실제 스크립트를 짜기 시작합니다.

04. 중간 테스트
    중간 중간마다 테스트코드를 넣어서 테스트합니다.
    만일의 사태를 대비해 예외처리 역시 합니다.

05. 주석달기
    다음 사람이 볼 코드이기에 주석을 답니다.
    보통 저만 볼때는 죽어도 안답니다.

06. 코드 정리
    코드들을 사람이 알아 볼수 있도록 이쁘게 타이핑합니다.
    (그럼 지금까지는? -_-;; NAZU는 사람이 아닌건가..;;)
    (알고보니 NAZU는 인조인간이었다는 속설이...;;)

07. 최종 테스트
    정리된 코드에서 버그가 나올 가능성도 있기에 테스트합니다.
    물론 미발견된 버그일수도 있습니다.
   
08. 최종 주석 정리
    주석을 정형화 시키고 테스트 코드를 뺍니다.

09. README 생성
    다른 사람이 사용할 수 있도록 내용을 답니다.
    스크립트 내 이력부(어디서 사용한다..를 기록함)를 작성합니다.
    여러가지 사용법도 넣고, 수정이 필요한 경우를 대비해,
    수정할 가능성이 있는 부분을 미리 언급해 둡니다.

10. 확인 및 수정 회의
    확인 및 수정이 필요할때, 수정 및 Change Log를 답니다.

뭔 스크립트 하나를 짜는데, 이렇게 복잡하냐구요?
장난스런 스크립트가 아닌 실제 개발이기 때문입니다.
또한, 뒷일은 저쪽(외주)에서 알아서 처리해야하므로,
최대한으로 설명을 많이 그리고 자세히 붙여둡니다.

가끔 echo나 yes/no가 많다고 불만을 가지기도 합니다.
그때 저는 "그럼 알아서 빼세요" 라고 합니다.
이는 쉽게 주석 처리만 하면되는 스크립트이기에 가능한 이야기입니다.

=================================================================
3. NAZU의 실제 코딩(같은 목적의 4가지 모듈)
=================================================================

누가 옆에있으면 괜시리 불안해서 암껏두 못하는 NAZU랍니다.
그래서 새벽 1시쯤 작업시작해서 3시쯤 끝냅니다.
물론, 그 다음날 뒤집어져서 오후까지 자는 버릇이..;;

그러고보니 이런적이 있네요.
1) 애들 집에 보내고
2) 혼자서 이책 저책 뒤지며 핵심만 2시간 공부하고,
3) 담날 애들 코딩시켰던..
지금 생각해보면 한마디로 악마였죠..;;
물론, 아웃풋은 예상치대로 나왔으니, 할말없는 애기들..ㅋㄷ

당시엔, 수업시간에 맨날 자다가 텀프로젝트 당일날에 가까워지면
문법도 모르면서 책보고 바로 코딩해버렸으니..;;

하지만, NAZU는 머리가 좋은 것이 아닙니다.
또한, NAZU는 실력이 좋은 것도 아닙니다.
실제로 NAZU는 머릿속에 지우개를 가지고 있습니다. (대략 치매)
단지, NAZU는 최단 시간에 최상의 집중력을 발휘할 뿐입니다.

자, 그럼 코딩을 보여드려야하는데..

NAZU가 너무 많은걸 보여주면 너무 많은 기대를 가지시는지라,
아주 간단한 검증없는 코드 몇줄만 보여드리겠습니다.
(원래는 이전에 작성한것을 하나 붙여 넣을까 했습니다.)
(그런데, 이렇게 드리는 것이 더 도움이 될 듯 합니다.)
나머지는 여러분들이 만들어 나가시는 겁니다. ^^*

1) A형
FILE=$1
for list in `cat $FILE`
do
    ......
done

2) B형
FILE=$1
{
    while [ 1 ]
    do
        read list
        ......
    done
} < $FILE

3) C형
FILE=$1
START_INDEX=0
END_INDEX=`cat ${FILE} | wc -l | cut -f1` #이해하기 쉬울듯^^?!
whlie [ $START_INDEX -le $END_INDEX ]
do
    ......
done

4) D형 (요고능 NAZU표 AND 여러분 자신표 bash script입니다.)
자신이 직접 작성해 보세요.. 도움이 되실 겁니다. ^^

물론 D형까지 확실히 작성하신 분들에게만 유용할 것입니다.
NAZU는 헛소리 안합니다. 정말입니다. ^^v
D형을 작성하신분만 4번을 보셨으면 하는 마음이 간절하네요..^^;;

=================================================================
4. D형이 완성되신 분들만 보세요.. (ㅡ.ㅡ 보통 이것도 안지키시죠?)
=================================================================

사람은 원래 절대 하라는대로 안합니다. 믿어 의심치 아니합니다.
저걸 보여드린 이유는? 데체 뭘까요?

- 많은 고민을 가져야할 숙제들..
1) A~D형의 원리를 서술하시오.
2) A~D형의 차이점을 서술하시오.
3) A~D형의 버그를 서술하시오.

엥? 버그?
몇줄 안되는 소스에 어마어마한 버그들이 숨어있습니다.
과연 어떤것이 숨어있을지요?

인터넷이든지, 여러가지 책을 보신분들도,
스크립트를 아주 잘 쓰신다는 분들도,
거의 찾지 못하는 버그가 상당수 존재합니다.

스스로 공부하는분들께는 많은 도움이 되지 않았을까 싶습니다.
버그를 찾으신분들은 댓글로 달아 공유해 주심이 옳은듯 하옵니다.
리눅스 Q/A 게시판에 제글이 있는건 아시죠?

NAZU는 거의 다 찾은것 같은데(?!) 안올립니다. ^^ 이해해주세요
모두 다 여러분들을 위한 것이니깐요 ^^

추천1) 단지 저 코드들에만 집중하신 분들께
중간중간에 다른 코드를 넣어보시고, 어떻게 동작하는지,
어떠한 버그가 발생하는지 확인해 보시기 바랍니다.
또한 어떻게 해결해야할지, 그것이 최상인지 고민해 보시기 바랍니다.

추천2) Local 환경에서만 버그를 찾으신 분들께
Remote 환경에서도 버그를 찾아 주시기 바라며,
remote background forking시 생기는 문제점들과, 이유, 해결책,
그리고 그것이 과연 최상인가에 대해서도 언급할수 있는 분이
한분쯤은 나와주시길 간절히 소망합니다. ^^

추천3) 현재, 여러분의 리눅스에서 마치 명령어처럼 사용되고 있는
여러가지 스크립트들을 분석해보세요. ^^

더 나은 코딩에 저보다 더 도움이 되실것이라 믿습니다.

=================================================================
5. 당부의 말씀
=================================================================

NAZU는...

여러분께 정답을 드리지는 않습니다.
또한 여러분이 직접적으로 원하시는 것도 올리지 않습니다.
단지, 여러분께 도움이 될만한 것들을 간접적으로 제공해 드립니다.
1) 어떤 것들을 보아야하고,
2) 무엇을 해야하고,
3) 어떤 이해가 필요한지 느끼실수 있도록..

이는 제 잡담을 읽어주시는 분들중 몇분은,
진정한 미래의 Linuxer를 꿈꾸시는 분들이라 생각하기 때문입니다.
SUK(Super User Korea) 자체가 그런 특성이 있는 사이트이기에....
스크립트를 Linux에서 제외하실 분이 아니실 경우,
이정도에서 포기하실 분이라면, 윈도우쪽으로 가셔요..
그리고 제 잡담을 그냥 잡담인가보다하며 읽어주시면 됩니다.
그러다 가끔 필요한 대목이 있으시다면, 찾아다 쓰시면 됩니다.

리눅스는 그렇게 만만한 상대가 아닙니다.
이도 아니고, 저도 아닌 자신만의 무기가 없어지기 전에..
미래를 위해서는 현명한 판단도 필요합니다.

언젠가...
제가 올리는 이런한 것들의 의미를 이해하는 날이 오게된다면,
그때는 리눅스 따라하기라는 제목이 얼마나 허망한 것인지를..
느끼시게 되지 않을까 합니다.

그리고 그때가 되면...
제가 봤던 어떤것과 같은 것을 여러분도 보시게 될것입니다.
그것이 여러분만의 모범해답입니다.

마지막으로...
저 버그들은 지금 당장은 안보이실른지 몰라도,
시간이 지나고 경력이 쌓이다보면 차차 보이실 수 있습니다.
그것이 하나 둘씩 보일때 다시한번 이글을 읽어보셨으면 하는
작은 바램이 있습니다.

감사합니다. (_ _)

=================================================================
6. 연재잡담-04 예고
=================================================================

[연재잡담-04] NAZU의 Codeless Bash Script (고급편3:원리) (GPL)

가장 처음에 서술했어야 했던 것중 하나였습니다만,
우선은 bash에 접근을 하시는것이 먼저였기에 순서를 바꿨습니다.
그냥 머리를 쉬어가는 페이지라고 생각해 주시면 됩니다. ^^*


관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,042 명
  • 현재 강좌수 :  35,846 개
  • 현재 접속자 :  108 명