Skip to main content

3. A First Script

파일을 실행 가능한 파일로 만들려면 실행 가능 비트를 설정해야 하며, 셸 스크립트의 경우 읽기 가능 비트도 설정해야 합니다:

$ chmod a+rx first.sh 

$ ./first.sh

첫 번째 셸 스크립트로는 "Hello World"라는 스크립트를 작성하겠습니다. 그런 다음 지금까지 읽은 그 어떤 튜토리얼보다 헬로 월드 프로그램에서 더 많은 것을 얻으려고 노력할 것입니다 :-).

다음과 같이 파일(first.sh)을 만듭니다:

#!/bin/sh
# This is a comment!
echo Hello World # This is a comment, too!

첫 번째 줄은 파일이 /bin/sh에서 실행되도록 Unix에 지시합니다. 이 위치는 거의 모든 유닉스 시스템에서 본 셸의 표준 위치입니다. GNU/Linux를 사용하는 경우 /bin/sh는 일반적으로 bash(또는 최근에는 dash)에 대한 심볼릭 링크입니다.

두 번째 줄은 특수 기호로 시작합니다: #. 이 줄은 주석으로 표시되며 셸에서 완전히 무시됩니다. 유일한 예외는 파일의 첫 번째 줄이 #!로 시작하는 경우입니다. 이것은 유닉스에서 특별히 취급하는 특수 지시어입니다. 즉, 대화형 셸로 csh, ksh 등을 사용하더라도 그 뒤에 오는 내용은 본 셸이 해석해야 한다는 뜻입니다. 마찬가지로, Perl 스크립트는 인터랙티브 셸에#!/usr/bin/perl 줄로 시작하여 뒤에 오는 프로그램이 Perl로 실행되어야 한다는 의미입니다. 본 셸 프로그래밍의 경우 #!/bin/sh를 사용합니다.

세 번째 줄은 두 개의 매개 변수 또는 인수가 있는 echo 명령을 실행합니다. 첫 번째 줄은 "Hello", 두 번째 줄은 "World"입니다.
echo는 매개변수 사이에 자동으로 공백을 하나씩 넣는다는 점에 유의하세요.

# 기호는 여전히 주석을 표시하며, #과 그 뒤에 오는 모든 것은 셸에서 무시됩니다.

이제 chmod 755 first.sh를 실행하여 텍스트 파일을 실행 가능하게 만들고 ./first.sh를 실행합니다. 그러면 화면이 다음과 같이 표시됩니다:

$ chmod 755 first.sh $ ./first.sh
Hello World
$

아마 예상하셨을 겁니다! 그냥 실행할 수도 있습니다:

$ echo Hello World 
Hello World
$

이제 몇 가지를 변경해 보겠습니다.
먼저, echo는 매개 변수 사이에 공백을 하나 넣습니다. "Hello"와 "World" 사이에 공백을 몇 개 넣습니다. 어떤 결과가 나올까요? 그 사이에 탭 문자를 넣으면 어떨까요?
셸 프로그래밍을 할 때 항상 그렇듯이 직접 시도해 보세요.
결과는 똑같습니다! 우리는 두 개의 인수를 사용하여 echo 프로그램을 호출하고 있으며, 이 프로그램은 두 인수 사이의 간격에 대해서는 cp와 마찬가지로 신경 쓰지 않습니다. 이제 코드를 다시 수정합니다:

#!/bin/sh
# This is a comment!
echo "Hello   World"      # This is a comment, too!

이번에는 작동합니다. 다른 프로그래밍 언어에 대한 경험이 있다면 이 역시 예상하셨을 것입니다. 하지만 더 복잡한 명령어와 셸 스크립트에서 무슨 일이 일어나고 있는지 이해하기 위해서는 이를 이해하고 설명할 수 있어야 합니다: 왜?
이제 echo는 단 하나의 인자, 즉 "Hello World"라는 문자열로 호출되었습니다. 이 문자열을 정확하게 출력합니다.
여기서 이해해야 할 점은 셸이 호출되는 프로그램에 인수를 전달하기 전에 인수를 구문 분석한다는 것입니다. 이 경우 따옴표는 제거하지만 문자열은 하나의 인수로 전달합니다.
마지막 예로 다음 스크립트를 입력해 보세요. 실행하기 전에 결과를 예측해 보세요:

#!/bin/sh
# This is a comment!
echo "Hello   World"      # This is a comment, too!
echo "Hello World"
echo "Hello * World"
echo Hello * World
echo Hello   World
echo "Hello" World
echo Hello "   " World
echo "Hello \"*\" World"
echo `hello` world
echo 'hello' world

모든 것이 예상대로 되었나요? 그렇지 않더라도 걱정하지 마세요! 이 튜토리얼에서 다룰 내용 중 일부에 불과하며.... 예, echo보다 더 강력한 명령을 사용하게 될 것입니다!