Bash스크립트는 유닉스시스템 초기의  sh(Bourne쉘)을 개선한 것으로서

 거의 모든 Linux/Unix에 기본으로 설치되어 있는 스크립트 언어이다.

요즈음은 더 나은 스크립트언어가 경쟁적으로 출시된 상황이지만 bash역시 시스템의 디폴트스크립트라는 점에서
큰 강점을 가진다. bash언어로 작성된 스크립트는 모든 Linux/Unix에서 추가적인 설치작업없이 실행될 수 있는 것이다.

한마디로' 이식성이 쵝오!'라고 말할 수 있다.

세상의 시스템 SW안에서 전체의 60%이상(?)이 스크립트언어(주로쉘스크립트)라고 들은 적이 있다.


Windows에는 batch(*.bat)스크립트가 기본으로 설치되어 있다.

사람이 수명이 있듯이 Software도 수명을 가지고 있다.
Windows batch스크립트만큼 수명이 긴 언어도 별로 없는 것 같다.


batch스크립트의 문법은 놀랄만큼 비일관적이며,  문법의 허점 내지는 버그가 많으며, 습득하기 어렵다.
한번 보고 익힌 후 잊어버리고, 다음에 또 익히고 잊어버리고 ...
근래에 batch를 대체할 스크립트들을 MS에서 발표한 지 꽤 된 것으로 아는데,
그다지 성공적으로 batch스크립트를 대체할 수 있었다는 얘기는 못 들은 것 같다.
Windows의 성공과 더블어 최소 30여년 동안 너무나 많이 퍼져 있기 때문일 것 같다.


batch만큼은 아니어도 초심자가 쉽게 접근하기 어렵다. 예를 들면 다음과 같은 if문을 실행시킨다면, 100%에러가 발생한다.
    if [-n "$a"]; then
       echo "hello $a world!"
    fi

C나 C++과 같은 컴파일링언어를 배운 초심자라면 오랜동안 의아한 후 이유를 알게 되면 허탈/분개한다.
위의 문장을 실행시키려면 다음과 같이 바꾸어야 한다.
    if [ -n "$a" ]; then
       echo "hello $a world!"
    fi
틀린그림 찾기?!

'if'문 다음에 '[' 다음에 빈칸을 주어야 한다.


위의 문장은 다음과 같이 바꾸어도 된다.
    if test -n "$a"; then
       echo "hello $a world!"
    fi
이유인즉 if문 다음에 사용한 '['는 단순한 언어구문의 일부가 아니다.

다음을 실행하면,
  $ which '['
    /usr/bin/[
다시말해 '['는 실행파일이며 test와 같다.


함수호출을 하는 스크립트(run.sh)를 만들어 보자.

bash_usage_1.png


다음과 같이 실행할 수 있다.
  $bash run.sh
위에 첫줄 '#!/bin/bash'를 넣고 파일에 실행퍼미션을 주면 다음과 같이 실행시킬 수 있다.

bash_usage_2.png
  $ chmod u+x run.sh
  $ ./run.sh
'#!' 스크립트 호출자에게 이 (스크립트) 파일을 실행하는 법을 알려주는 것이다. perl이라면 다음과 같이 시작했을 것이다.
'#!/usr/bin/perl'