본문 바로가기

BashShell Programming

Learning the bash Shell 정리 - 1장


이 포스팅은 아래의 서적을 참조하여 작성되었습니다.


1장 세부 목차

- What Is a Shell?

- Scope of This Book

- History of UNIX Shells

   The Bourne Again Shell

   Features of bash

- Getting bash

- Interactive Shell Use

   Commands, Arguments, and Options

- Files

   Directories

     The working directory

     Tilde notation

     Changing working directories

     Filenames, Wildcards, and Pathname Expansion

   Brace Expansion

- Input and Output

   Standard I/O

   I/O Redirection

   Pipelines

- Background Jobs

   Background I/O

   Background Jobs and Priorities

- Special Characters and Quoting

   Quoting

   Backslash-Escaping

   Quoting Quotation Marks

   Continuing Lines

   Control Keys

- Help

 

1.1 What Is a Shell?

 

해당 참고 서적은 유닉스나 리눅스에 다루고 있는 책이 아닙니다. BASH '' 대한 사용법을 다루고 있습니다. 따라서 포스팅에서 또한 유닉스 자체가 아니라 Bash 쉘에 대해서 다루게 것이며, 기본적인 유닉스 사용법에 대해서는 이미 알고 있는 독자분들을 대상으로 글을 작성해 나아갈 예정입니다.

 

 그렇다면 쉘이란 것이 과연 무언인지 짚고 넘어가야할 것입니다. 쉘을 한마디로 표현하자면 '명령어 해석기'라고 있겠습니다. 시스템에 특정 명령을 전달하고자 때에, 사용자는 프롬프트에 명령어를 전달해줍니다. 해당 명령어는 사람이 쉽게 인지할 있는 형태를 띄고 있습니다. 그러한 명령어를 전달 받은 쉘은, 이제 사람이 쉽게 알아볼 있었던 형태의 명령어에서 시스템이 해석하기 더욱 편리한 형태로 명령어를 '해석' 해주고, 해석된 명령어를 커널에 전달해 주게 됩니다. 바로 이러한 명령어 해석 절차를 수행해주는 프로그램이 쉘입니다.

 

  sort -n phonelist > phonelist.sorted

 

위의 예제는 우리가 흔히 프롬프트에 입력해주는 형태의, 사람이 쉽게 인지할 있는 형태의, 명령어 구문 하나입니다. 이러한 명령어를 사용자로부터 전달 받으면 쉘에서는 우선,

 

 해당 명령어를 각각의 '워드' 단위로 나누어 줍니다. 해당 명령어를 워드 단위로 나누어 주면, sort , -n , phonelist , > , phonelist.sorted  형태가  것입니다. 
 
  워드 단위로 나누고  후에는, 각각의 워드의 목적을 정해줍니다. 해당 예제에서 sort 명령이고, -n, phonelist 인수 >, phonelist.sorted 입출력 명령이라는 목적을 갖게 됩니다. 
 
  > phonelist.sorted 같은 절대 명령에 따라 입출력 방향이 설정됩니다.
 
  인수의 용도는 명령에 따라 달라지게 됩니다.  경우 sort명령을 찾아 -n이라는 '옵션', phonelist라는 '옵션에 귀속되는 인수' 함께 적용하여 명령이 실행되게 되는 것입니다. 

 

이는 쉘에서 명령을 처리하는 과정을 굉장히 단순화 시켜 설명한 것입니다. 실제로는 좀더 복잡한 몇가지의 단계들이 있습니다. 마지막으로 다시 한번 강조하면, 자체는 유닉스가 아니라, 유닉스의 사용자 인터페이스라는 것을 이해하고 넘어가셨으면 합니다.

 

1.2 Scope of This Book

 

참고 도서의 목차를 그대로 따를 것이며, 따라서 부분은 책의 목적을 알려 드리는 파트가 것입니다. 목차를 그대로 따를 것이기에 책의 목적을 설명드리면, 포스팅의 목적도 설명 것입니다.

 

우선 1, 2장에서는 프롬프트를 통한 대화식 명령 수행법을 설명하게 것입니다.

3장에서는 BASH쉘에서의 사용자 환경 설정 방법을 설명하게 것이며, 이는 4, 5, 6장을 통해 자세히 다루게 프로그래밍에 대한 준비 과정이 것입니다.

7, 8장에서는 BASH 입출력과 프로세스를 제어하는 방법을 다룰 것이며,

9장에서는 작성한 프로그램을 디버깅하는 기법을 다루게 것입니다.

여기 까지가 프로그램을 작성하는 방법에 관한 내용이라면, 10, 11, 12 장을 통해서는 작성된 프로그램을 여러분의 시스템에 실제로 적용시키는데 도움이 만한 내용이 나옵니다.

 

  포스팅에서는 책을 주로 참고하여 내용을 다루겠지만 내용 요약을 하려는 것은 아닙니다. 목차 정도만 거의 그대로 이용하며, 속의 내용물은 다른 서적들과 인터넷 등을 참조하여 새롭게 구성할 것입니다.

 

 

1.3 History of UNIX Shells

 

본쉘(sh)

본쉘은 1979년에 스티븐 (Steven Bourne) 의해 만들어졌습니다. 작성자의 이름을 본쉘이라 이름지어 졌으며, 유닉스가 처음으로 대중화된 UNIX Version 7에서부터 도입이 되었습니다. 유닉스의 역사와도 같은 쉘이며 현재 까지도 가장 사랑받은 중의 하나입니다. 콘쉘, Z, BASH 등의 모체가 되었습니다. 앞으로 우리가 다루게 BASH쉘의 특징 가지는 본쉘에 기초하고 있습니다. 본쉘은 프롬프트로 $문자를 사용하고 있습니다.

 

C(csh)

 버클리 대학의 조이(Bill Joy) 의해 작성 되었으며, C쉘이라는 이름이 붙은 것은 명령 구문을 C언어와 비슷하게 만들었기 때문입니다. 본쉘에서는 지원되지 않았던, alias, history, command line substitutuing, job control등의 편리한 기능들을 지원하였기에, 대중적으로 인기를 끌었던 최초의 쉘로 기억되고 있습니다. C쉘은 본쉘과는 달리 % 프롬프트로 사용하고 있습니다.

 

콘쉘(ksh)

 AT&T 데이비드 (David Korn) 작성하여, 역시 작성자의 이름을 콘쉘이라 이름 지어졌습니다. 콘쉘은 본쉘을 발전시켜 작성된 본쉘 계열의 쉘로써, 본쉘이 가지는 모든 기능을 포함하고 있으며, 이에 더해 C쉘의 기능이었던 alias, history, command line substitutuing, job control등의 기능을 추가하였습니다. 이렇게 본쉘과 C쉘의 장점을 두루 갖추고, 콘쉘만의 특징이 추가된 강력한 쉘입니다. BASH와도 만은 점에서 비슷하지만, 결정적인 차이가 있다면, 콘쉘은 상용 쉘이라는 것일 겁니다. 콘쉘은 SVR4에서 기본쉘로 채택 되었었습니다. 콘쉘은 본쉘이 바탕이니 프롬프트 또한 본쉘과 같은 $ 사용하고 있습니다.

 

 

 Z(zsh)

Z쉘은 콘쉘을 재작성하여 만들어진 쉘입니다. 콘쉘의 기능들을 기본으로하며, advanced command line substitutuing, 명령어의 이름, argument, 변수의 이름을 정정하는 기능, 향상된 histroy 기능등이 추가되었습니다. 프롬프트는 C쉘과 같이 % 기호를 사용합니다.

 

 TC(tcsh)

 TC쉘은 C쉘을 재작성하여 만들어진 쉘입니다. 역시 C쉘의 기능을 기본으로 하며, 여러가지 추가적인 기능들이 제공됩니다. 명령어 편집 기능, 명령어 완성 기능, 명령어 이름, argument, 변수의 이름을 정정하는 기능, 향상된 history 기능등이 추가로 제공되는 기능입니다. 프롬프트는 > 기호를 사용합니다.

 

1.3.1 The Bourne Again Shell

마지막으로 포스팅의 주제가 되는 BASH쉘에 대해 살펴 보겠습니다. BASH쉘은 Bourne Again SHell 약자로,

 

1.3.2 Features of bash

BASH 본쉘과 호환이 되며, C쉘과 콘쉘의 장점 또한 가지고 있을 뿐더러 BASH만의 장점도 가지고 있습니다. BASH 특징으로,

 

 command-line editing mode 통해 잘못된 명령을 입력했거나, 명령을 조금 수정항려 다시 입력하려 하거나 때에 C쉘의 history기능보다도 편리하게 활용이 가능합니다. 사람들이 BASH 매력을 느끼는 가장 이유가 되고 있습니다.

 

 그리고 향후 8장에서 자세히 다루게 job control기능이 있습니다. 이는 C쉘에 따온 기능으로, 작업을 시작, 중지, 종료하는 등의 제어가 가능합니다.

 

 또한 다양한 옵션들이 새로 추가되었고, 함수, 제어구조, 정수연산, 고급 I/O 제어등 많은 부분에서 쉘을 커스토마이즈할 있게끔 되어 있습니다.

 

1.4 Getting bash

 

BASH 사용하기 위해서는 우선 여러분의 시스템에서 BASH 사용 가능한지부터 알아봐야 것입니다. 간단하게 bash라는 명령어를 입력해 보도록 합시다. 만약 BASH 설치되어 있다면 BASH쉘로 사용자 쉘이 바뀌게 입니다. 현재 사용하고 있는 쉘을 조회해보고 싶다면, 사용자echo $SHELL 명령문을 통해 조회하실 있습니다.

 

 시스템에 따라 /etc/shells파일이 있을 있는데(필자는 테스트 용도로 CentOS 5.5버전을 사용하고 있습니다) 파일을 조회해보면 현재 지원 가능한 쉘들의 목록을 살펴볼 있습니다. 만약 BASH 사용할 없는 상황이라면, 12장을 참조하여 BASH 시스템에 설치하실 있을 것입니다.

 

 만약 BASH 사용 중에 있다면 echo $BASH_VERSION 명령문을 통해서 현재 사용하고 있는 BASH 버전 정보를 확인하실 있습니다. 필자의 테스트 서버에는 BASH 버전 3.2.25(1)-release 설치되어 있으며, 참조 도서는 BASH 버전 3 기준으로 작성 되었습니다.

 

 사용자의 기본 쉘을 변경해주기 위해서는 /etc/passwd 파일을 수정하여 주시거나, chsh 명령을 사용하시면 됩니다.

 

1.5 Interactive Shell Use

 

BASH 대화식으로 사용한다는 것은 /bin/bash test.sh 라는 식으로, 한번 사용되는 상황과 달리, BASH쉘로 로그인 하여 BASH 프롬프트를 띄워놓고 사용하겠다는 입니다. BASH 프롬프트의 형태는 기본적으로 [계정명@호스트명 경로]$ 형태를 띄고 있으며, 3장을 통해 이러한 프롬프트의 모양을 변경하는 방법이 소개될 것입니다.

 

1.5.1 Commands, Arguments, and Options

명령문은 하나 이상의 워드로 구성되며, 각각의 워드는 공백이나 탭으로 구분되게 됩니다. 이러한 명령문의 첫번째 워드가 바로 명령이 되며, 나머지 부분은 해당 명령에 인수(내지는 매개변수) 사용되게 되는 부분입니다.

 

 예를 들면, lp myfile이라는 명령문은, lp myfile이라는 워드로 구성되어 있으며, 중에서도 첫번째 워드인 lp 명령이되며, myfile lp명령을 수행할 인수로써 참조하게 되는 부분입니다. lp명령은 파일을 인쇄하는 명령어이며, 뒤에 오는 인수가 바로 출력할 파일 명이 됩니다. , 명령문은 myfile이라는 파일을 출력해주는 명령이 되겠습니다.

 

 옵션은 인수 중의 하나로 특수한 형태를 띄고 있습니다. 옵션은 일반적으로 인수의 시작부분을 - 사용하고 있습니다. 옵션을 지정해줌으로써, 해당 명령이 어떠한 일을 해야할지를 알려줄 있습니다. 예를 들면, lp -h myfile이라는 명령에서 2번째 워드인 -h lp명령이 사용할 옵션 부분이 되며. -h옵션은 lp명령이 파일을 인쇄할 배너 페이지는 인쇄하지 않게끔 해줍니다.

 

 일부의 옵션은 옵션 자체가 인수를 필요로 하기도 합니다. 예를 들면, lp -d lpl -h mysql 같은 형태가 있습니다. 명령문에서 -d lp1 부분은, -d라는 옵션과, lp명령이 아닌 -d 옵션이 인수로 사용하게 되는 lp1이라는 인수로 구성이 됩니다. 여기서 -d옵션은 특정 프린터로 출력 결과를 보내라는 옵션이며, 따라서 특정 프린터를 지정해 주기 위해 lp1이라는 인수가 -d옵션에 의해 사용되게 되는 것입니다.

 

1.6 Files

 

유닉스 시스템은 모든 대상을 파일의 형태로써 관리를 하고 있습니다. 파일은 크게 3가지의 종류로 나눌 있는데, 이는 일반 파일, 실행 파일, 디렉토리가 되겠습니다.

 

 실행 파일이란 프로그램이라고도 부르며, 명령을 통해 실행 파일들이 실행됩니다. 컴파일을 통해 사람이 읽을 없는 형태로 변환된 실행 파일도 있으며, 앞으로 우리가 작성하게 스크립트와 같이 텍스트 형태를 띄며 사람이 읽을 있는 형태로 실행 파일도 있습니다.

 

 디렉토리란 파일들을 보관하는 폴더라고 생각하면 됩니다. 그러한 디렉토리 자체도 파일 형태로 관리되고 있습니다. 디렉토리 안에 다시 디렉토리를 담을 수도 있으며, 이러한 디렉토리를 하위 디렉토리라고 부릅니다. 그리고 이러한 디렉토리의 구조를 트리 구조라고 합니다.

 

  외의 모든 파일은 일반 파일이라고 보시면 되겠습니다.

 

1.6.1 Directories

직전에 언급했듯이, 디렉토리란 파일들을 보관하는 폴더이고, 파일 형태로 관리되며, 디렉토리 안에 하위 디렉토리를 담을 수도 있으며, 이러한 디렉토리의 구조를 트리 구조라고 합니다. 트리 구조의 상위에 해당하는 디렉토리를 루트 디렉토리라고 하며, / 기호로 표현됩니다. 루트 기호를 시작으로 하위 디렉토리를 순서대로 입력하고 가장 뒤에는 파일명을 입력하게 됩니다. 이러한 루트로 시작되는 경로 표현 방법을 절대 경로라고 합니다.

 

The working directory

작업 디렉토리란, 현재 작업이 진행 중인 디렉토리를 뜻합니다. 절대 경로 표현법과 달리, 현재 작업하고 있는 작업 디렉토리를 기준으로 파일 경로를 표현해 주는 방법도 있습니다. 이러한 경로 표현 방법을 상대 경로라고 합니다. 예를 들면 lp myfile이라는 명령에서 myfile이라는 파일의 경로가 상대 경로로 표현된 것입니다. 경우 현재 작업하고 있는 디렉토리를 기준으로 하여, 현재 디렉토리에 위치하고 있는 myfile이라는 파일을 참조할 것입니다. 같은 명령문을 절대 경로를 통해 표현한다면 lp /home/bashtest/myfile 같이 /기호로 시작되는 형태가 것입니다.

 

Tilde notation

틸드란 ~기호의 이름입니다. ~기호는 디렉토리를 뜻하고 있습니다. 단순히 ~ 기호만을 사용하면 현재 로그인 되어있는 계정의 디렉토리를 의미하며, ~mysql 같이 ~기호에 계정명을 바로 붙여 사용하면 해당 계정의 디렉토리를 의미하게 됩니다. 경로를 표현할 시에 이러한 ~문자를 기준으로하여 틸드 표기법을 사용할 수도 있습니다. lp ~/myfile 같은 형태로 사용하면, 현재 로그인 중인 계정의 디렉토리에서 myfile이라는 파일 찾아 출력해 것입니다.

 

특정 디렉토리를 나타내는 기호들

/

루트 디렉토리

.

현재 디렉토리

..

상위 디렉토리

~

디렉토리

-

현재 작업 디렉토리로 이동하기

직전에 있었던 작업 디렉토리

 

Changing working directories

cd라는 명령을 통해서는 작업 디렉토리를 이동할 있으며, pwd 명령을 통해 현재의 작업 디렉토리 위치를 확인해 있습니다. 작업 디렉토리의 변경과 상대 경로 표현을 통해, 찾으려는 파일의 위치를 보다 간략하게 표기해 있습니다. 이러한 작업 디렉토리의 변경에도 위에 나와있는 디렉토리를 나태내는 기호들을 적용해 있습니다.

 

 

 

Filenames, Wildcards, and Pathname Expansion

파트에서 다를 내용은 경로명 확장이란 것이다. 이는 참조하려는 파일의 경로를 지정하기 위하여, 경로와 파일명의 일부를 와일드카드라 일컫는 특수 기호로 대체하는 방식이다.

 

?

하나의 문자

*

0 이상의 문자 여러개

[abcd]

[ ]안에 있는 문자들을 통해, 문자 1글자로 치환함

[!abcd]

[ ]안에 있는 문자들을 통해, 문자 1글자로 치환함

[:alnum:]

알파벳과 숫자

[:alpha:]

알파벳 문자

[:digit:]

숫자 번호

[:upper:]

알파벳 대문자

[:lower:]

알파벳 소문자

[a-d]

a~d abcd

[0-5]

0~5 012345

 

[예제]

rm -f /ARC*/*_1_86[2-5]??_*.arc
SHOPHOWS_1_86200_.arc

 

 

1.6.2 Brace Expansion

중괄호 확장이란 경로명 확장과 비슷한 내용이다. 하지만 경로명 확장이 정확히 파일명에 대한 대체로만 사용할 있다면, 중괄호 확장은 문자열을 대체하는 데에 사용할 수도 있다. , echo a{b,c,d} 같은 명령문의 결과 값은 ab ac ad 것이다. 경로명 확장은 문자에는 적용이 되지 않으므로 echo a[bcd] 같은 명령을 입력한다면 a[bcd] 그대로 출력된다.

 

 중괄호 안에 다시 중괄호를 입력하는 것도 가능하며, 와일드 카드와 함께 사용하여 파일명 선택에 이용할 수도 있다.

1.7 Input and Output

유닉스에서의 입출력은 크게 가지의 기본 개념을 통해 살펴볼 있습니다. 문자열 형태를 파일 I/O 통해 받아들이겠다는 것과, 하드웨어 디바이스를 포함한 모든 입출력 내용을 파일을 통해서 관리하겠다는 것입니다.

 

1.7.1 Standard I/O

일반적으로 유닉스 시스템에서는 표준 입력, 표준 출력, 표준 에러 출력이라는 것을 통해 입출력을 관리하고 있습니다. 여기서 표준 입력은 키보드, 표준 출력과 표준 에러 출력은 화면을 의미합니다. , 표준의 입력 도구인 키보드를 통해서 입력을 받고, 그에 대한 결과값이나 에러 메세지는 화면에 출력해 주는 것입니다. 물론 유닉스의 I/O 이러한 표준 입출력 장비를 통해서만 이루어 지는 것은 아니며, 이에 대해서는 7장에서 자세하게 다루어질 것입니다.

 

 간단하게는 입출력 재지정을 통해 입출력에 사용할 파일을 지정해 있으며, 파이프라인을 통해 명령의 결과값을 다른 명령의 입력값으로 사용할 수도 있습니다.

 

1.7.2  I/O Redirection

 

< filename

지정 파일로부터 입력받음

> filename

지정 파일로 결과 출력

>> filename

출력 내용을 지정 파일에 추가해

2> filename

지정 파일에 에러 메세지 출력

2>> filename

에러 메세지를 지정 파일에 추가해

&>filename

 

>&filename

 

2>&1

에러 메세지를, 결과 메세지 출력 경로와 같게

1>&2

결과 메세지를, 에러 메세지 출력 경로와 같게

>|

출력 재지정시 noclobber 오버라이드

<> 

filename 지정 파일이 디바이스 파일이라면, 표준 입출력에 모두 지정 디바이스를 이용

 

/bin/sh example.sh > example.log 2>&1 &
/bin/sh example.sh > /dev/null 2>&1 &

 

1.7.3 Pipelines

파이프라인을 이용하면, 출력 방향을 파일이 아닌 다른 명령으로 재지정하는 것도 가능합니다. ls -l | more 같은 구문이 자주 사용되는 형태의 파이프라인 구현 법입니다. 만약 ls -l 명령만을 독립적으로 사용했다면, 현재 디렉토리의 파일 정보들을 표준 출력 위치인 화면에 표시해줄 것입니다. 여기에 | more 같이 파이프라인을 사용하면 화면으로 출력되어야 결과물이 그대로 more 명렁의 입력 값으로 사용되게 됩니다. 좀더 풀어서 설명하자면 ls -l > temp 명령을 수행한 뒤에, more < temp명령을 수행한 것과도 결과가 같을 것입니다. 물론 이대로 실행한다면 temp라는 파일이 하나 새로 생성되어있을 것이며, 파이프라인 기능이 지원되지 않는 시스템에서는 여전히 이런 식으로 여러 줄에 걸쳐 불편하게 프로그램을 작성해야 합니다.

 

1.8 Background Jobs

 

일반적으로 명령을 실행하면, 해당 명령이 종료될 때까지 사용자는 프롬프트를 반납 받을 없습니다. , 명령이 완료될 때까지 해당 세션에서는 다른 명령을 수행할 없다는 것입니다. 사이즈가 파일을 복사하는 명령을 입력하였다면, 파일 복사가 완료될 때까지 시간이고 가만 놔두어야 하게 될지도 모릅니다. 이런 상황에서 활용할 있는 것이 바로 백그라운드 작업입니다. 이를 통해 단일 세션에서도 한번에 한가지 이상의 명령을 실행할 있게 됩니다. cp 100G.file /backup/100G.file & 같은 식으로 명령문 마지막에 & 입력하여 주면, 해당 명령은 백그라운드에서 작업하게 되며, 사용자는 바로 프롬프트는 반납 받을 있습니다. 그러면 파일이 복사되고 있는 동안에도 얼마든지 다른 작업을 수행할 있는 것입니다. 이에 관한 자세한 내용은 8장에서 다시 설명 것입니다.

 

1.8.1 Background I/O

백그라운드에서 돌아가는 작업은 표준 입력을 통해 제어되지 않습니다. 포어그라운드 작업만이 사용자가 무엇을 입력하는지 듣고 있는 것입니다. 헌데 입력의 경우와 출력의 경우는 다릅니다. 백그라운드에서 돌아가는 작업이라 할지라도 모든 출력 결과물은 표준 출력인 화면에 표시하게 됩니다. 만약 화면에 표시할 내용이 엄청나게 많은 작업을 백그라운드에서 수행하고 있다면, 혹은 포어그라운드에서 하고 있는 작업에 혼란을 빚을만한 내용이 화면에 출력되고 있다면 문제가 아닐 없습니다. 따라서 일반적으로 백그라운드에서 동작하게 작업은 출력재지정을 통하여 결과값을 특정 파일로 돌려주어야 것입니다. 이러한 출력 재지정에 관한 내용은 7장에서 다시 언급될 것입니다.

 

 

1.8.2 Background Jobs and Priorities

백그라운드 작업을 돌리면, 오래 걸리는 작업을 기다려야 하는 시간을 줄여주지만, 이러한 백그라운드 작업이 쌓이게 되면 시스템 자원에 대한 소모가 커질 것입니다. 이렇게 여러 개의 작업이 백그라운드에서 수행되고 있다면, 하나의 작업만을 수행할 보다 처리 속도가 떨어질 밖에 없습니다. 따라서 경우 nice라는 명령어를 통해 어떤 작업에 우선순위를 두어 자원을 할당할지 지정해 있습니다.

 

1.9 Special Characters and Quoting

 

~

디렉토리

`

명령 대체

#

주석

$

변수 표현식

&

백그라운드 작업

*

와일드카드(0 이상의 문자)

(

하위 시작

)

하위 종료

\

다음 문자의 인용

|

파이프라인

[

한글자 대체 와일드카드 시작

]

한글자 대체 와일드카드 종료

{

중괄호 확장 시작

}

중괄호 확장 종료

;

명령 분리 수행

강한 인용부호

약한 인용부호

< 

입력 재지정

> 

출력 재지정

/

디렉토리명 분리

?

와일드 카드(1개의 문자)

!

파이프라인(논리NOT)

 

1.9.1 Quoting

위의 도표에서 있다시피, 1장에서 설명될 마지막 특수기호는 바로 따옴표입니다. 따옴표로 묶어져 있는 부분에서는 특수문자가 특수문자로써 동작하지 않습니다. 예를 들면, echo 5 > 3’과 같은 형태로 명령을 입력하면, > 기호가 출력 재지정 특수 문자로 적용되는 것이 아니라, >기호 자체로써 이용되어 화면에 5 > 3 이라고 출력될 것입니다.

 

1.9.2 Backslash-Escaping

따옴표를 사용하는 것이 범위에 걸쳐서 특수문자를 동작하지 않도록 해준다면, 슬래쉬는 역슬래쉬 바로 뒤에 이어지는 하나의 특수문제에 대해서만 동작하게 됩니다.

 

1.9.3 Quoting Quotation Marks

따옴표라는 특수문자를 동작하지 않게 하기 위해서는, 따옴표를 따옴표로 묶을 수는 없으며, 역슬래쉬를 사용하게 됩니다.

 

1.9.4 Continuing Lines

명령을 입력하고 엔터키를 입력하면 명령이 수행된다는 것쯤은 누구나 알고 있을 것입니다. 여기에서 엔터키 또한 명령을 실행하겠다라는 의미의 특수문자입니다. 따옴표나 역슬래쉬등으로 엔터키를 묶어주면, 명령을 실행하겠다라는 특수문자로써의 엔터키 기능이 사라지고, 다음 줄로 전환하겠다는 기능으로 동작합니다. 이렇게 하면 여러줄에 걸쳐서 명령을 입력하는 것도 가능하게 것입니다.

 

1.9.5 Control Keys

키보드의 컨트롤 키를 누른 상태로 다른 키를 누르는 것으로써 동작하는 일종의 특수 문자들이 있습니다. 이러한 특수 문자에 대해 확인해 보기 위해서는 stty -all명령을 사용할 있습니다. 이때에 ^기호가 컨트롤 키를 의미하며, 각각 어떠한 기능에 매핑되어 있는지 확인해볼 있습니다.

 

 

^M

엔터키에 해당

^C

현재 명령 중지

^D

입력의

^\

^C 같은 내용이지만 ^C 동작하지 않을 쓰라

^S

화면 출력 정지

^Q

화면 출력 다시 시작

DEL or ^?

마지막 문자 삭제

^U

전체 명령행 삭제

^Z

현재 명령 서스펜드 상태로

 

1.5 Help

 

우리가 흔히 사용하는 ls명령은 외부 명령어라고 합니다. 외부 명령어란, 해당 명령을 수행하기 위해 명령 프로그램이 따로 존재하는 명령을 의미합니다. which ls 입력해보면 해당 프로그램이 어디에 존재하는지를 확인할 있을 것입니다. 그렇다면 이번에는 which cd 한번 입력해 보도록 합시다. 그런 프로그램은 찾을 없다는 에러가 출력될 것입니다. 이렇게 따로 실행 파일이 존재하지 않는 명령어들도 있는데, 이러한 명령어는 쉘에서 제공되는 내장 명령어라고 합니다. BASH에서는 help라는 명령어를 통해 이러한 내장 명령어들의 종류를 확인해 있으며, 다시 help cd 같이, help명령의 인수로 내장 명령어를 입력해주면, 해당 내장 명령어에 대한 도움말을 얻을 있을 것입니다.

 

'BashShell Programming' 카테고리의 다른 글

6. Command-Line Options and Typed Variables  (0) 2011.04.20
챕터 5. 흐름 제어  (0) 2011.04.19
4. Basic Shell Programming  (0) 2011.02.21
3. Customizing Your Environment  (0) 2011.01.25
2장 Command-Line Editing  (0) 2011.01.17