RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
Linux/SHELL  2006/09/08 23:12
출처 블로그 > 수진오빠 개그소매상
원본 http://blog.naver.com/soojin001/140005615267
- 본 쉘 프로그래밍 -

2001년 1월 13일
written by 허정수(wertyu@nownuri.net)

1. 왜 쉘 프로그래밍을 배워야 하는가?
이 글을 읽는 사람들 중에서는 왜 쉘 프로그래밍을 배워야 하는지 아는 사람도 있고, 모르는 사람도 있을 것이다. 21 세기, 리눅스를 사용하기도 많이 편리해지고, X 윈도를 실행해서 버튼 몇 개만 클릭하면 편하게 사용할 수 있는데 왜 어려운 쉘 프로그래밍을 배워야 하는지 모르는 사람도 있을 것이다.

하지만, 리눅스를 어느 정도 사용해 본 사람이라면, 리눅스를 편하게 사용하기 위해서 쉘의 사용법과 쉘 프로그래밍을 꼭 알아야 하는 것을 알고 있을 것이다. 어느 책에서는 MS Windows와 유닉스/리눅스의 가장 큰 차이점을 바이너리와 텍스트로 설명하고 있다. 즉, MS Windows는 바이너리 유닉스는 텍스트이다. MS Windows는 모든 설정을 바이너리로 관리하여 사용자가 직접 프로그램의 설정을 변경할 수 없고, 설정을 변경하기 위해서는 꼭 설정을 변경하는 프로그램을 통해야만 한다.(regedit 처럼) 하지만 유닉스는 모든 설정을 텍스트 파일로 관리한다. (요즘 MS Windows도 Script를 이용하여 설정을 바꿀 수 있도록 변하고 있는 추세이다. 즉 유닉스의 장점을 MS Windows도 이해하고 따라가고 있다.)

이 극명한 차이가 쉘 프로그래밍을 배워야 하는 이유이다. 예를 들어 설명해 보자. 시스템 교체를 위해 MS Windows와 유닉스의 사용자 1만 명을 다른 시스템으로 옮긴다고 생각해 보자. MS Windows에서는 분명 사용자 추가하는 프로그램을 실행하여 각 1만 명의 아이디와 암호 및 프로필을 손수 입력해야 할 것이다. 아무리 클릭을 빠르게 하고, 타이핑이 아무 빨라고 많은 시간이 필요하다. 하지만, 유닉스에서는 간단하게 스크립트를 짜서 실행하면 된다.

다른 예도 있다. 다음과 같이 현재 디렉터리에 확장자가 gif인 파일이 많이 있다고 하자.

13:28[wertyu@inos test]$ ls
a.gif b.gif c.gif d.gif mmv.sh*

그런데, 여기 있는 gif 파일의 확장자를 모두 jpg로 바꾸려고 한다. 앞의 예에서는 파일이 4개 밖에 안 되지만 만약, 파일이 1000개 라면 당신은 어떻게 할 것인가. 이 때 간단히 스크립트를 짜서 실행하면 쉽게 확장자를 고칠 수 있다. 다음의 스크립트는 확장자가 gif인 파일의 확장자를 jpg로 바꾸는 스크립트이다.(프롬프트 앞의 13:13은 필자의 프롬프트에서 시간을 나타낸다.)

13:31[wertyu@inos test]$ cat mmv.sh
#! /bin/sh

X=`ls *.gif`
for B in $X
do
temp=`basename $B .gif`
mv $B $temp.jpg
done

13:31[wertyu@inos test]$ ls
a.gif b.gif c.gif d.gif mmv.sh*
13:31[wertyu@inos test]$ ./mmv.sh
13:31[wertyu@inos test]$ ls
a.jpg b.jpg c.jpg d.jpg mmv.sh*

어떤가 쉽지 않은가?

2. How the Shell Interpret What You Typed

이번 절에서는 아주 간단히 쉘이 어떻게 작동하는지 알아 보려 한다. 이번 절의 제목을 해석해 보면, "쉘은 당신이 입력한 것을 어떻게 해석하는가"(How the Shell Interpret What You Typed)이다. 쉘이 작동하는 방법을 조금이나마 이해하기 바란다. 다들 알고 있겠지만, 쉘은 리눅스에서 명령을 내리는데 가장 중요한 프로그램이다.(MS Windows에서의 Shell은 Internet Explorer이다. 알고 있었나?). 쉘은 명령을 내리기 위해서는 어쩔 수 없이 거쳐야 하는 프로그램이기 때문에 쉘이 작동 원리를 이해하면 명령을 쉽고 빠르고 간단하게 입력할 수 있다. 또한 쉘이 작동하는 원리를 정확히 이해해야만 쉘 프로그램도 잘 짤 수 있다.

다음의 예를 보자. 다음과 같이 간단한 C로 작성한 프로그램이 있다.

13:42[wertyu@inos test]$ cat how.c
#include <stdio.h>

void main(int argc, char* argv[])
{
int cnt ;

for( cnt = 1 ; cnt < argc ; ++cnt )
{
printf("arguement %d = %s
", cnt , argv[cnt] ) ;
}
}

이 프로그램을 how라는 실행 파일로 컴파일 해 놓자.

문제 1.
다음의 실행 결과는 무었인가?

$ how $HOME

을 실행 시키면 출력 결과는 무었일까? 이 문제는 쉬울 것이다.

답 1.

13:47[wertyu@inos test]$ ./how $HOME
arguement 1 = /home/wertyu
13:47[wertyu@inos test]$

문제 2.

디렉터리에 다음과 같은 파일들이 있다.

13:48[wertyu@inos test]$ ls
a.jpg b.jpg c.jpg d.jpg how* how.c mmv.sh*

다음을 실행하면 무엇이 출력 될까.

13:48[wertyu@inos test]$ ./how *

이건 조금 어렵다. 쉽게 맞출 수 있는 사람도 있겠지만, 대부분의 사람들은 '*'가 출력된다고 답할 것이다. 그러나 답은....

답 2.

13:48[wertyu@inos test]$ ./how *
arguement 1 = a.jpg
arguement 2 = b.jpg
arguement 3 = c.jpg
arguement 4 = d.jpg
arguement 5 = how
arguement 6 = how.c
arguement 7 = mmv.sh
13:49[wertyu@inos test]$

위의 두 문제를 풀어 봄으로서 대충이나마 쉘의 작동 방법을 이해할 수 있었을 것이다.

3. 쉘 스크립트를 작성해 보자.

이제 기본적인 설명은 끝났으므로 실제 쉘 스크립트를 작성해 보자. 쉘 스크립트의 첫 줄은 항상 다음과 같이 시작을 해야 한다.

#! /bin/sh

이 첫 줄은 인터프리터를 지정하는 줄이다. 앞으로 나올 여러 명령들을 인터프리트할 프로그램을 지정한다. 마찬가지로 awk로 스크립트를 작성하기 위해서는 스크립트의 첫 줄은 #! /bin/awk로 시작해야 할 것이다.

쉘 스크립트를 작성하는 방법은 간단한다. 사용하기 편한 에디터로 명령들을 적은 후에 파일의 모드를 '실행' 모드를 주는 것이다. 다음의 예를 보자


14:01[wertyu@inos test]$ cat > echo.sh
#! /bin/sh
echo $1

14:02[wertyu@inos test]$ chmod 775 echo.sh
14:02[wertyu@inos test]$ ./echo.sh Parameter
Parameter
14:02[wertyu@inos test]$

위의 예를 보면 알 수 있듯이 각자 사용하기 편리한 에디터로 스크립트를 작성한 후 chmod 명령으로 파일에 실행 권한을 주어 실행 할 수 있다. 참고로 앞에 나온 echo.sh은 입력받은 parameter 중 첫 번째 parameter를 출력하는 쉘 스크립트이다.

3.1 변수의 선언 및 사용법

쉘 프로그램에서 변수를 선언하는 방법을 알아 보자. 변수는 간단히

변수명=변수값

과 같이 선언할 수 있다. 여기서 중요한 것은 '변수명'과 '=', '변수값' 사이에 공백이 있으면 안 된다는 것이다. 따라서 다음과 같은 쉘 프로그램은 잘못된 것이다.

14:07[wertyu@inos test]$ cat wrong.sh
#! /bin/sh
x = 123
echo $x
14:07[wertyu@inos test]$ ./wrong.sh
./wrong.sh: x: command not found

'x = 123' 부분을 'x=123'과 같이 수정한 후 실행 시키면 123이 출력되는 것을 볼 수 있다.

선언한 변수를 사용하기 위해서는 앞의 예와 같이 변수명 앞에 $를 붙여주면 된다.

3.2 Flow of Control
Flow of Control이란 한글 책에서 흔히 '흐름 제어'로 번역되는 단어로서 '조건 분기문' '루프' 등을 나타낸다. 어떠한 프로그램이든 그 프로그램을 구성하는 프로그램 logic 중 80%는 Flow of Control일 정도로 어떤 language를 배우든 Flow of Control을 익히는 것은 매우 중요하다.

3.2.1 if 문

본 쉘 프로그래밍에서 if문은 다음과 같이 사용된다.

if test_statement_A
then
statement_B
statement_C
else
statement_D
fi

다음의 예를 보자

14:36[wertyu@inos test]$ cat test.sh
#! /bin/sh

if [ $# -eq 0 ]
then
echo "No arguement"
else
echo "There are $# arguement(s)"
fi
14:36[wertyu@inos test]$ ./test.sh
No arguement
14:36[wertyu@inos test]$ ./test.sh a b c d e
There are 5 arguement(s)

여기서도 중요한 것은 '[' 와 조건을 검사하는 부분과 ']' 사이에 공백이 있어서는 안 된다는 것이다.
'$#' 변수는 본쉘 스크립트의 특수 변수로서 인자의 수를 나타내는 변수이고, -eq는 equal의 약자로서 두 수가 같은지 비교하는 연산자 이다.

if [ $# -eq 0 ] 은 다음과 같이 바꾸어 사용해도 된다.

if test $# -eq 0

즉, 앞의 test.sh 스크립트는 다음의 스크립트와 동일하게 동작한다.

14:42[wertyu@inos test]$ cat test.sh
#! /bin/sh

if test $# -eq 0
then
echo "No arguement"
else
echo "There are $# arguement(s)"
fi

test는 외부 명령으로서 주어진 expression을 검사하여 true or false를 return하는 명령이다. 여기서 test를 예로 든 것은 if 의 조건에는 외부 명령이 함께 쓰일 수 있기 때문이다. 즉, 다음 스크립트와 같이 작동하는 스크립트를 작성할 수 있다.

if ls plot.ps
then
lpr plot.ps
else
echo ":::: ERROR FILE DOESN'T EXIST ::::"
fi

앞의 예제 스크립트는 plot.ps라는 파일이 있을 경우에 프린트를 하고, plot.ps라는 파일이 없을 경우에는 에러 메시지를 출력하는 스크립트이다.


3.2.2 숫자의 비교

앞의 예에서 -eq로 두 수의 값이 같은지 비교하는 것을 보았다. -eq 외에도 많은 연산자가 있다.

-eq : equal, 두 수가 같냐?
-ne : not equal, 두 수가 같지 않냐?
-gt : greater than, 왼쪽 변수가 오른쪽 변수보다 크냐?
-lt : less than, 왼쪽 변수가 오른쪽 변수보다 작냐?
-ge : greater than or equal, 왼쪽 변수가 오른쪽 변수보다 크거나 같냐?
-le : less than or equal, 왼쪽 변수가 오른쪽 변수보다 작거나 같냐?

3.2.3 문자열의 비교

문자열을 비교하기 위한 연산자는 다음과 같다.

[ "String1" = "String2" ] : 두 문자열이 같은지
[ "String1" != "String2" ] : 두 문자열이 다른지
[ -z $X ] : $X라는 문자열 변수의 길이가 0이면 참
[ -n $X ] : $X라는 문자열 변수의 길이가 0이 아닐 경우 참

또한 '!'는 NOT을 나타낸다. 따라서 다음의 두 expression은 같은 것이다.

[ -z $X ]
[ ! -n $X ]

3.2.4 File 검사

이번 절에서는 File과 관련된 test를 알아보기로 한다. 파일이 존재하는지 검사하는 스크립트는 프로그램의 설정 파일을 검사할 때 많이 쓰인다. 예를 들어 $HOME/.vimrc가 있을 경우 $HOME/.vimrc 설정 파일을 읽어 들이고 없을 경우 default 설정 파일을 읽어 들이도록 하는데 사용될 수 있다.

[ -b file ] : file이 존재하고 file이 block special file인 경우 참
[ -c file ] : file이 존재하고 file이 character special file인 경우 참
[ -d file ] : file이 존재하고 file이 directory인 경우 참
[ -f file ] : file이 존재하고 file이 일반적인 file인 경우 참
[ -g file ] : file이 존재하고 file에 Set-Group-Id가 set 되어 있는 경우 참
[ -h file ] : file이 존재하고 file이 symbolic link인 경우 참
[ -H file ] : file이 존재하고 file이 hidden directory인 경우 참
[ -k file ] : file이 존재하고 file에 sticky bit가 set되어 있는 경우 참
[ -p file ] : file이 존재하고 file이 named pipe인 경우 참
[ -r file ] : file이 존재하고 file에 읽기 권한이 있는 경우 참
[ -s file ] : file이 존재하고 file의 size가 0이 아닌 경우 참
[ -u file ] : file이 존재하고 file에 Set-User-Id가 set되어 있는 경우 참
[ -x file ] : file이 존재하고 file에 실행 권한이 있는 경우 참
[ -w file ] : file이 존재하고 file에 쓰기 권한이 있는 경우 참

위의 모든 것을 외울 필요는 없지만 쉘 스크립트에서 file과 관련하여 어떤 것을 검사할 수 있는지 정도는 알아두는 것이 좋다.

3.2.5 AND/OR 연산자

C 언어에서는 &&가 logical AND 연산자, ||가 logical OR 연산자인데, 본 쉘 프로그래밍에서는 AND는 -a, OR는 -o 이다.

3.2.6 Loop

본 쉘 프로그래밍에서는 C 언어와 비슷하게 3 개의 Loop 관련 문을 제공한다.

3.2.6.1 for

for문의 문법은 다음과 같다

for VARIABLE in LIST
do
STATEMENT1
STATEMENT2
done

1절에서 잠시 살펴 본 여러 file의 확장자를 동시에 바꾸는 스크립트를 다시 한 번 살펴보자

#! /bin/sh

X=`ls *.gif`
for B in $X
do
temp=`basename $B .gif`
mv $B $temp.jpg
done

X에 ls *.gif의 값이 저장된다. 이 값은 LIST의 형태로 생각하면 된다. 즉, 차례로 확장자가 gif인 파일이 저장된다고 생각하라.
for B in $X를 살펴 보면, 앞의 ls *.gif의 결과 값 각각에 대해서 for 이하의 문을 실행하라는 것이 된다. 그리고 그 각각의 값은 임시로 B에 저장이 된다.

temp=`basename $B .gif`

basename은 $B에서 .gif 부분을 제외한 부분을 리턴하는 프로그램이다. 직접 프롬프트에서 명령을 내려서 결과를 확인할 수도 있다.

23:17[wertyu@inos test]$ basename wertyu.gif .gif
wertyu

여기서 중요한 것은 '가 아니라 `이라는 점이다. 쉘 스크립트에서 변수의 값에 외부 명령을 실행 시킨 결과 값을 저장하기 위해서는 ` command `를 이용하면 된다. 즉

temp=`basename $B .gif`

는 $B에서 .gif 부분을 떼어버리고 남은 문자열을 temp에 저장하는 것이 된다. 나머지는 쉽게 이해할 수 있을 것이라 생각된다.

다음의 스크립트는 grep과 비슷한 스크립트이다. (출처:http://pneuma.phys.ualberta.ca/~gingrich/research/shells/shells.html, 이 글에서 설명한 본 쉘 스크립트의 문법은 앞의 사이트에서 가져온 것도 몇 개 있으니 참고하기 바란다.)

#! /bin/sh
#
# A script to look for the occurence of a string in a file
# Usage: match [string] [file]
#
for word in `cat $2`
do
if [ ``$word'' = ``$1'' ]
then
echo ``Found $1 in file $2''
else
:
fi
done

각자 이해해 보시길.... 근데, ``$word'' = ``$1'' 의 의미는 필자도 잘 모르겠다. 그냥 $word = $1으로 바꿔도 잘 돌아가던데....

3.2.6.2 while

for 문에 대해서는 이해가 되었을테니 이제 while 문을 볼까?

문법)

while condition
do
commands
done

예) 10, 9, 8,...,1을 출력하는 스크립트이다.

number=10
while [ $number -ge 1 ]
do
echo $number
number=`expr $number - 1`
done

while은 condition이 참일 동안 loop를 돈다.

3.2.6.3 until

until은 while과 거의 비슷하다.

문법)

until condition
do
commands
done

단, while과 한 가지 차이점이 있는 것은 while은 condition이 참일 동안 loop를 돌지만, until은 condition이 거짓일 동안 loop를 돈다는 것이다.

다음의 예는 while에서의 예와 같은 일을 하는 스크립트를 until을 이용하여 작성한 것이다.

예)

number=10
until [ $number -lt 1 ]
do
echo $number
number=`expr $number - 1`
done

3.2.7 case 문

이 번 절에서는 case 문에 대해서 알아 보겠다. C 언의 case와 아주 유사하므로 쉽게 이해할 수 있을 것이다. 단, C 에서는 if-elseif를 쉽게 case 문으로 바꿀 수 있지만, 본 쉘 스크립트에서의 case는 if 보다 훨 씬 많은 기능을 제공한다.

다음의 예를 보자.

#!/bin/sh
case $# in
0)
echo ""no parameters"";;
1)
echo "only one parameter." ;;
*)
echo "more than one parameter." ;;
esac

설명 안 해도 이제 이해되겟지? case 다음의 $#의 값에 따라서, 0)이냐 1)이냐에 따라서, 원하는 것을 실행 시킬 수 있다.
위의 예에서는 case의 장점을 살펴 볼 수 없었다. 그러나 다음의 예를 보면, case의 유용함에 대해서 쉽게 알 수 있을 것이다. case의 유용함은 Regular Expression을 사용할 수 있다는 것이다. Regular Expression 까지 설명하려면 글이 길어 지므로, Regular Expression은 필자가 번역한 http://nnr.or.kr/linux/regular.htm을 참고하거나 다른 참고 자료를 살펴 보기 바란다.
그럼 다음의 예를 보자

while :
do
echo "Would you like to continue? c"
read ANS
case $ANS in
[yY] | [yY][eE][sS]) echo "Fine, then we'll continue."
break
;;
[nN] | [nN][oO]) echo "We shall now stop."
exit
;;
*) echo "You must enter a yes or no verdict!"
esac
done
echo "
We are now out of the while loop."

일단 저장해 놓고 실행 해 보자. 돌려 보면 알겠지만, Yes를 입력하든 Y를 입력하든 YES를 입력하든 yEs를 입력하든, [yY] | [yY][eE][sS])는 true가 된다.
참 하나 설명을 안 하고 넘어간 부분이 있다.

while :

은 항상 참을 나타낸다.

아. 또 read도 설명 안 했군. read ANS는 사용자로부터 문자열을 입력받아 ANS에 저장하는 명령이다.

이 정도면 설명이 다 되었을 것이다.

4. 마치면서

아주 간단하게나마 본 쉘 프로그래밍에 대해서 알아 보았다. 너무나 간단하여 복잡한 일은 하기 힘들 것이다. 남은 것은 여러분의 노력 뿐... 아주 간단하게 본 쉘 스크립트를 알아 보았으므로, 다음 시간에는 TIP을 중심으로 본 쉘 스크립트에 대해서 알아 보겠다. 단, 필자도 아직 위의 내용 이외에는 아는 것이 별로 없으므로 공부를 한 후에 나머지 내용을 쓰도록 하겠다.

* 참고 자료 :

http://www.sao.nrc.ca/imsb/rcsg/documents/bourne/bourne.html
http://pneuma.phys.ualberta.ca/~gingrich/research/shells/shells.html

ps. 검색 엔진에서 shell programming이라고 입력하면 수 많은 결과가 나올테니 열심히 공부하기 바란다~~~


-------------------------------------------------------------------------------------------


출처 블로그 > Jay's
원본 http://blog.naver.com/cocktail74/40004597832

특수문자

Match

사용 예

Match

.

임의의 한 문자

*

한 번도 없거나 한번 이상 반복

abcd*

abc, abcd, abcdd 등과 match

.*

모든 문자

^

행의 처음

^X

행의 첫머리의 X

X^

행의 임의의 위치의 X

^/^ or ^^

행의 첫머리의 ^

$

행의 마지막

X$

행의 끝의 X

$X

행의 임의의 위치의 X

\$$ or $$

행의 끝의 $

[]

[,] 안의 아무 문자

c[aeiou]t

cat, cet... 와 match

-를 사용하여 범위 설정 가능

c[a-z0-9]t

두 번째 문자의 임의의 소문자나 숫자

-와의 match를 위해선 [-나 -] 이용

c[-ai]

c-, ca, ci

]와의 match를 위해선 []와 같이 나타냄

c[]ai]

c], ca, ci

^를 [다음에 사용하면 [, ]안의 문자를 제외한 문자들과 match

[A^-Z]

대문자를 제외한 문자

\{n,m\} (ed, sed, grep 에서만 사용 가능)

\{n\}은 바로 앞의 expression이 n번 반복 된 것

[0-9]\{3\}

세 개의 숫자

\{n,\}은 바로 앞의 expression이 n번 또는 그 이상 반복된 것

0\{4,\}

4개 이상의 0

\{n,m\}는 바로 앞의 expression이 n번에서 m번 반복된 것

1\{4,9\}

4개에서 5개의 1

\

특수 문자들의 기능을 수행하지 않고 문자 그대로 받아들임

\*\**

한 개 또는 그 이상의 *

^[ ^I]*$

공백행과 space나 TAB을 포함한 행(겉보기 공백행). 여기서 ^I는 ctrl+I로써 TAB과 같다

^.*$

임의의 행 전체

modifier를 이용하여 변수 값이나 history에 저장된 명령어의 내용을 변환시킬 수 있다.

(단, set A = (/home/user/temp.c), set B = (a.c b.c c.c d.c))

Modifier

기능

사용 예

결과

:h

pathname에서 마지막 부분을 제어하고 앞부분만 남김

echo $A:h

/home/user

:t

pathname에서 마지막 부분만 남기고 pathname을 제거함

echo $A:t

temp.c

:r

pathname에서 끝 부분의 .xxx만 제거

echo $A:r

/home/user/temp

:e

.xxx만 남기고 앞부분 제거

echo $A:e

c

:g

:gh, :gr, :gt, :ge의 형태로 사용되며, array변수에 저장된 모든 값들에 h,r,t,e를 적용시킨다.

echo $B:r

a b c d

:p

명령어를 실행시키지 않고 출력만 시킨다.

!:p

:q

특수 문자들의 기능을 수행하지 않고 단순히 출력만 시킨다.

%echo *
%!:q

*

특수문자

의미

비고

!

history 기능을 시작하기 위한 특수문자

!n

n번째로 사용된 명령 실행

!-n

현재부터 n번째 앞에 사용된 명령 실행

!!

바로 전에 실행되었던 명령 실행

!-1

!string

가장 최근에 string으로 시작되는 명령 실행

!?string[?]

가장 최근에 string을 포함하고 있는 명령 실행

^aa^bb

마지막으로 실행된 명령어에서 aa를 bb로 치환하여 명령 실행

!*

마지막으로 실행된 명령에 사용된 모든 argument

!$ or !!$

마지막 명령의 마지막 argument

!^

마지막 명령의 첫 argument

event:s^aa^bb

event는 앞에서 !로 시작하는 history 명령이다. aa를 bb로 치환한다. 단, ^대신 다른 특수 문자를 사용하여도 된다.

ex) !23:s/aa/bb

!:n or !!:n

마지막 명령의 n번째 argument

!:n*

마지막 명령의 n번째부터 그 이후의 argument

!:n-$

!:0

마지막 명령의 명령어만 나타냄

!:n-m

마지막 명령의 n번째부터 m번째까지의 argument

!:-n

마지막 명령의 명령어부터 n번째 argument까지

!:n-

마지막 명령의 n번째부터 마지막 argument를 제외한 argument

!?string?%

가장 최근에 string을 포함하고 있는 단어를 나타냄

색코드

의미

0

기본 화면색. 흰 글자색. 검정 배경색

1

bold intensity

4

흑백 모드에서는 밑줄

5

반짝임

7

역상

30

검정 (회색) 글자색

31

빨강 (옅은 빨강) 글자색

32

녹색 (옅은 녹색) 글자색

33

갈색 (노랑) 글자색

34

파랑 (옅은 파랑) 글자색

35

보라 (옅은 보라) 글자색

36

cyan (옅은 cyan) 글자색

37

흰색 (밝은 흰색) 글자색

40

검정 (회색) 배경색

41

빨강 (옅은 빨강) 배경색

42

녹색 (옅은 녹색) 배경색

43

갈색 (노랑) 배경색

44

파랑 (옅은 파랑) 배경색

45

보라 (옅은 보라) 배경색

46

cyan (옅은 cyan) 배경색

47

흰색 (밝은 흰색) 배경색

10

기본 font 선택

38

밑줄 사용 가능

39

밑줄 사용 불가능

Escape Sequence

기능

ESCc

화면을 지우고 커서를 1행 1열로 이동시킴

ESC[nA

커서를 현위치에서 위로 n칸 이동

ESC[nB

커서를 현위치에서 아래로 n칸 이동

ESC[nC

커서를 현위치에서 오른쪽으로 n칸 이동

ESC[nD

커서를 현위치에서 왼족으로 n칸 이동

ESC[n;mH 또는 ESC[n;mf

커서를 m열 n행으로 이동시킴

ESC[nJ

n = 0 이면 현위치에서 화면의 끝까지 지움
n = 1 이면 화면의 처음에서 현위치까지 지움
n = 2 이면 화면 전체를 지움

ESC[nK

n = 0 이면 현재 커서의 위치에서 행의 끝까지 지움
n = 1 이면 행의 처음에서 현재의 커서 위치까지 지움
n = 2 이면 현재 커서가 있는 행을 모두 지움

ESC[nL

n 행을 현재 커서 위치에 삽입

ESC[nM

현재 커서 위치에서부터 n행 삭제

ESC[nP

현재 커서 위치의 행의 처음부터 n개 문자 삭제

ESC[nX

현재 커서 위치에서부터 n개 문자 삭제

ESC[nM

화면의 색지정. 여러 가지 색을 지정할 때는 ;를 사용하여 구분한다.

2006/09/08 23:12 2006/09/08 23:12
이 글에는 트랙백을 보낼 수 없습니다
«이전  1 ... 2 3 4 5 6 7 8 9 10 ... 13  다음»
웅쓰:웅자의 상상플러스
웅자의 상상플러스
전체 (379)
게임 (5)
영화 (2)
기타 (23)
맛집 (5)
영어 (2)
대수학 (3)
형태소 (5)
Hacking (9)
Linux (112)
HTML (48)
Application_developing (48)
Web_developing (102)
Window (11)
«   2024/11   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
  1. 2016/01 (1)
  2. 2015/12 (3)
  3. 2015/10 (3)
  4. 2015/03 (2)
  5. 2015/01 (4)