'Linux/ShellScript'에 해당되는 글 6건
- 2010.11.02 ANSI Escape(ESC) character
- 2010.10.28 쉘내부 명령어
- 2010.05.29 [script]directory tree로 보여주기
- 2010.05.23 [Script] 파일 점검 프로그램
- 2010.05.23 [if연산] test 관련 연산자
- 2010.05.16 쉘(Shell) 환경
- escape character란?
- 사용자가 입력한 명령어가 시스템에 전달된다는 것은 곧 일반 문자가 전달된다는 것이다.
- 이러한 이유 때문에 입력한 문자 외에 시스템을 제어하기 위한 별도의 문자가 필요하게 되는데 이러한 문자들을 이스케이프 문자라고 함.
- 예) 화면을 제어하기 위한 커서 이동, 화면의 일부 또는 전체를 지우기, 문자의 출력 속성, 화면의 스크롤, 색상 출력 등
- escape 문자와 함께 "[" 문자 뒤에 적절한 제어 명령어를 전달.
- 이렇게 제어된 문자들을 통칭하여 "escape character"라고 함.
- escape(ESC) 사용 형식
- echo ESC[(숫자)(문자)
- ESC는 명령행(Command Line)상에서는 직접 <ESC> 키를 입력하여 사용할 수 있고,
<CTRL + V>를 입력하고 <ESC> 키를 치거나 <CTRL + V><CTRL + [> 키를 입력.
|
|||||
키 종류 | 설명 | ||||
ESCc | 화면을 지우고 커서를 1행 1열로 이동 | ||||
ESC[nA | 커서를 현 위치에서 위로 n칸 이동. | ||||
ESC[nB | 커서를 현 위치에서 아래로 n칸 이동. | ||||
ESC[nC | 커서를 현 위치에서 오른쪽으로 n칸 이동. | ||||
ESC[nD | 커서를 현 위치에서 왼쪽으로 n칸 이동. | ||||
ESC[n;mH or 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[nX | 현재 커서 위치에서부터 n개 문자를 삭제. | ||||
ESC[nP | 현재 커서 위치에서 행의 처음부터 n개 문자를 삭제. | ||||
ESC[nm | 화면의 색 지정, 여러가지 색을 지정할 때는 <;>를 사용하여 구분. | ||||
ESC[x;yr | 가로는 x열, 세로는 y행만큼의 화면 크기를 설정. | ||||
|
|||||
값 | 글자의 속성 | 값 | 글자의 색 | 값 | 배경색 |
00 | 없음 | 30 | 검은색 | 40 | 검정색 |
01 | 굵게 | 31 | 빨간색 | 41 | 빨간색 |
04 | 밑줄 | 32 | 녹색 | 42 | 녹색 |
05 | 깜빡거림 | 33 | 노랑색 | 43 | 노랑색 |
07 | 반전 | 34 | 파랑색 | 44 | 파랑색 |
08 | 숨김 | 35 | 자홍색 | 45 | 자홍색 |
36 | 청록색 | 46 | 청녹색 | ||
37 | 하얀색 | 47 | 하얀색 |
bash 에서 색상 출력 : echo -e "\\033[01;31m<color>\\033[0m"
c에서 색상 출력 : printf (" %c[1;31m<color>%c[0m\n",27 , 27);
'Linux > ShellScript' 카테고리의 다른 글
쉘내부 명령어 (0) | 2010.10.28 |
---|---|
[script]directory tree로 보여주기 (0) | 2010.05.29 |
[Script] 파일 점검 프로그램 (0) | 2010.05.23 |
[if연산] test 관련 연산자 (0) | 2010.05.23 |
쉘(Shell) 환경 (0) | 2010.05.16 |
명령어 | 설명 |
: | 항상 명령어의 실행값은 참을 반환하며 아무 액션도 발생하지 않는다. 참값을 반환하기 떄문에 "while : ;do"과 같은 형태로 루프문에서 무한 루프를 설정하고자 할 때 사용. |
. | 지정한 파일로부터 읽거나 실행 |
alias | 명령어에 대한 앨리어스 지정 |
bg | 특정한 프로세스를 백그라운드로 실행 |
bind | readline에서의 키 또는 함수, 매크로에 키 순서를 결합 하고자 할 때 사용 |
break | 루프문에서 루프문을 탈출하고자 할 때 사용 |
builtin | 내부 명령어나 함수를 실행할 때 사용할 수 있으며 스크립트에서 외부 명령어와 내부 명령어가 같은 이름으로 존재할 떄 내부 명령어만 실행한다. 만일 지정한 내부 명령어나 함수가 존재하지 않는다면 에러를 출력. |
cd | 디렉토리 이동 명령어 |
command | 내부 명령어 및 외부 명령어를 실행하며 세부적인 정보를 출력할 수 있는 명령어 |
continue | 루프문에서 루프문의 처음으로 되돌아 갈 때 사용하는 명령어 |
declare | 변수를 선언하거나 속성을 부여하고자 할 때 사용하는 명령어 |
dirs | 현재 저장되어 있는 디렉토리 리스트 목록을 출력 |
disown | 쉘에서 활성화 되어 있는 작업 테이블에서 특정한 작업 목록을 삭제 |
echo | 입력된 문자의 출력 |
enable | 내부 명령어의 활성화 및 비활성화 |
eval | 설정되어 있는 인자를 명령어로 변환 |
exec | 현재 프로세스를 치환 |
exit | 종료 |
export | 지정한 환경변수를 하위 프로세스까지 전달 |
fc | 히스토리 편집 및 리스트 출력 |
fg | 포그라운드에서 실행 |
getopts | 명령어의 옵션을 분리하는 명령어 |
hash | 입력한 명령어에 대한 경로를 해쉬 테이블에 저장하여 명령어를 다시 호출할 때 시스템 패스 $PATH에서 검색하지 않고 해쉬 테이블에서 검색 |
help | 내부 명령어의 도움말 출력 |
history | 이전에 사용한 명령어의 출력 |
jobs | 현재 실행중인 작업 목록 출력 |
kill | 현재 실행중인 프로세스 종료 및 재시작 |
let | 산술 논리 계산 |
local | 로컬 변수의 선언 및 호출 |
logout | 로그 아웃 |
popd | 저장된 디렉토리 스택으로부터 제거 |
printf | 정형화된 데이터의 출력 |
pushd | 디렉토리 스택으로 저장 |
pwd | 현재 디렉토리 출력 |
read | 프롬프트로부터 데이터를 입력 |
readonly | 프롬프트로부터 읽기 전용의 데이터 입력 |
return | 호출한 부모 프로세스로 반환되는 값 |
set | 변수값 설정 |
shift | 위치매개변수의 이동 |
shopt | 쉘 옵션의 출력 및 설정 |
source | 지정한 파일로부터 읽거나 실행 |
suspend | 특정한 신호를 입력받을 때까지 일시 중지 |
test | 조건식을 평가할 때 |
times | 프로세스가 사용한 총 시간을 출력 |
trap | 명령어 실행도중 특정한 신호가 입력되었을 때의 처리 |
type | 지정한 명령어가 내부 명령어인지 외부 명령어인지를 출력 |
typeset | declare와 같은 의미 |
ulimit | 시스템 자원을 제한 |
unmask | 파일 및 디렉토리에 대한 생성 마스크 설정 |
unalias | 앨리어스 해제 |
unset | 함수 및 변수의 초기화 |
wait | 하위 프로세스가 종료될 때까지 대기 |
'Linux > ShellScript' 카테고리의 다른 글
ANSI Escape(ESC) character (0) | 2010.11.02 |
---|---|
[script]directory tree로 보여주기 (0) | 2010.05.29 |
[Script] 파일 점검 프로그램 (0) | 2010.05.23 |
[if연산] test 관련 연산자 (0) | 2010.05.23 |
쉘(Shell) 환경 (0) | 2010.05.16 |
#! /bin/sh usage(){ echo "Usage: $0 [-a] [-f] [-h] [-p] [-s] [Directory]" echo " [Option] -a (-A) : directory and file" echo " -f (-F) : output to file (dtree.text)" echo " -h (-H) : help" echo " -s (-S) : with block-number" exit 1 } DIR=`pwd` OPT="" OPT1="" tailr() { awk '{ line[NR] = $0 } END { for(i=NR; i>0; i--) print line[i] }' } for kinta in $* do case $kinta in -[aA]) OPT="-a" ;; -[sS]) OPT1="-s" ;; -[fF]) dtree.sh $OPT $OPT1 $DIR > dtree.text echo " dtree.text [done]" exit 0 ;; -[hH]) usage ;; *) if [ -d $kinta ] ;then echo -n "" else echo -n "Directory or Option not found : " echo $kinta usage fi DIR=`(cd $kinta; pwd)` break 1 ;; esac done #du | awk | tailr du $OPT $DIR | awk ' BEGIN { save_cnt=0 base_cnt = length("'"$DIR"'") for(i=1; i<100; i++) nest[i]=0 opt="'"$OPT1"'" } { cnt=1 for(i=length($2); i>base_cnt; --i) { if(substr($2,i,1) == "/") cnt++ } len=0 for(scnt=length($2); scnt; --scnt) { if(substr($2,scnt,1) == "/") { scnt++ break } len++ } nest[cnt] = 1 if (cnt < save_cnt) { nest[save_cnt] = 0 } else if (cnt > save_cnt) { for(i=1; i<=save_cnt; ++i) { if(nest[i] == 1) printf " |" else printf " " } printf "\n" } for(i = 1; cnt != 1 && i <= cnt; ++i) { if (nest[i] == 1) printf " |" else printf " " } if (cnt == 1) { if (opt == "-s" ) printf " %s(%d)\n", $2, $1 else printf " %s\n", $2 } else { if (opt == "-s") printf "-- %s(%d)\n", substr($2, scnt,len), $1 else printf "-- %s\n", substr($2, scnt, len) } save_cnt = cnt } ' | tailr
'Linux > ShellScript' 카테고리의 다른 글
ANSI Escape(ESC) character (0) | 2010.11.02 |
---|---|
쉘내부 명령어 (0) | 2010.10.28 |
[Script] 파일 점검 프로그램 (0) | 2010.05.23 |
[if연산] test 관련 연산자 (0) | 2010.05.23 |
쉘(Shell) 환경 (0) | 2010.05.16 |
1
#!/bin/sh2 # # crontab -e
3 # Min Hour Day Mon Week CMD
4 # 0 8 * * * /root/shell/check_file.sh
5 ##
6 # cat /root/shell/test/.mail_contents_OK.txt
7 # Have a Good Day !!!!!
8 ##
9 # cat /root/shell/test/check_file_list.txt
10 # .....
11 # /etc/passwd
12 # /etc/group
13 # /etc/hosts
14 # .....
15
16 F_LIST=/root/shell/test/file_list.txt # check file list
17 T_FILE=/var/tmp/.tmp1 # tempory file
18 F_RESULT=/root/shell/test/result.`date '+%m%d'` # check result for report file
19 #EMAIL=root # admin email : root@example.com
20
21 cp /dev/null $F_RESULT # 결과파일 초기화
22
23 for F_NAME in `cat $F_LIST` # 점검해야 하는 파일 목록 읽기
24 do
25 if [ -f $F_NAME.orig ] ; then # 백업파일 존재 유무 확인
26 diff $F_NAME $F_NAME.orig > $T_FILE # 원본파일<-->백업파일 비교
27 if [ -s $T_FILE ] ; then
28 echo "$F_NAME [ WARN ]" >> $F_RESULT
29 else
30 echo "$F_NAME [ OK ]" >> $F_RESULT
31 fi
32 else
33 cp $F_NAME $F_NAME.orig
34 fi
35 done
36
37 if grep WARN $F_RESULT > /dev/null 2>&1 ; then
38 # mailx -s "Critical Satus. Check Files" $EMAIL < $F_RESULT
39 echo "WARNNING"
40 else
41 # mailx -s "OK" $EMAIL < $F_RESULT
42 echo "OK"
43 fi
44 # rm T_FILE # tempory file delete
45
점검할 파일을 file_list.txt 파일에 정의하고 이 파일들에 대해 백업파일을 만든후 하루에 한번씩
원본 파일과 백업파일의 내용이 같은지를 점검하는 프로그램이다. 매일 아침마다 리포트 형태로 출력
하여 출근시에 보고를 받을수 있도록 메일을 보내는 형식으로 되어져 있다.
1 #!/bin/ksh
2 #
3 # Reference : /root/shell/check_file.sh
4 #
5 F_RESULT=/root/shell/test/result.`date '+%m%d'`
6 T_FILE=/var/tmp/.tmp.$$
7 awk '/WARN/ { print $1 }' $F_RESULT > $T_FILE
8 for FILENAME in `cat $T_FILE`
9 do
10 cp $FILENAME $FILENAME.orig
11 done
만약 이상이 있어서 점검이 끝나면 관리자가 직접 OK_check.sh 스크립트를 동작시켜 원본파일과 백업
파일을 동기화시켜 줘야 한다.
'Linux > ShellScript' 카테고리의 다른 글
ANSI Escape(ESC) character (0) | 2010.11.02 |
---|---|
쉘내부 명령어 (0) | 2010.10.28 |
[script]directory tree로 보여주기 (0) | 2010.05.29 |
[if연산] test 관련 연산자 (0) | 2010.05.23 |
쉘(Shell) 환경 (0) | 2010.05.16 |
■ 파일 관련 test 연산자
연산자 |
설명 (다음의 경우 참) |
-e file |
파일이 존재하는 경우 |
-d file |
파일이 존재하고 디렉토리인 경우 |
-f file |
파일이 정규 파일인 경우 |
-b file |
파일이 존재하고 블록 디바이스 파일인 경우 |
-c file |
파일이 존재하고 문자 디바이스 파일인 경우 |
-p file |
파일이 존재하고 파이프나 이름이 있는 파이프(FIFO 파일)인 경우 |
-S file |
파일이 존재하고 소켓인 경우 |
-L file |
파일이 존재하고 심볼릭 링크인 경우 |
-r file |
파일이 존재하고 읽을 수 있는 경우 |
-w file |
파일이 존재하고 쓰기 가능한 경우 |
-x file |
파일이 존재하고 실행할 수 있는 경우 |
-u file |
파일이 존재하고 SetUID 비트가 설정된 경우 |
-g file |
파일이 존재하고 SetGID 비트가 설정된 경우 |
-k file |
파일이 존재하고 Sticky 비트가 설정된 경우 |
-s file |
파일이 존재하고 빈 파일이 아닌 경우 |
fileA -nt fileB |
fileA가 fileB보다 더 나중에 생성된 경우 |
fileA -ot fileB |
fileA가 fileB보다 더 이전에 생성된 경우 |
fileA -ef fileB |
fileA과 fileB가 같은 파일을 가리키고 있는 경우 |
■ 문자열 관련 test 연산자
연산자 |
설명 |
stringA = stringB |
stringA가 stringB와 같은 경우 |
stringA != stringB |
stringA가 stringB와 같지 않은 경우 |
stringA < stringB |
stringA가 stringB보다 사전순서로 먼저 나오는 경우 |
stringA > stringB |
stringA가 stringB보다 사전순서로 나중에 나오는 경우 |
-z string |
string의 길이가 0인경우 |
-n string |
string이 NULL이 아닌 경우 |
■ 산술연산 test 구문
연산자 |
설명 |
exprA -eq exprB |
산술연산 exprA와 exprB가 같은 경우(-eq: equal) |
exprA -ne exprB |
산술연산 exprA와 exprB가 같지 않은 경우(-n: not equal) |
exprA -lt exprB |
산술연산 exprA가 exprB보다 작은 경우(-lt: less than) |
exprA -le exprB |
산술연산 exprA가 exprB보다 작거나 같은 경우(-le: less equal) |
exprA -gt exprB |
산술연산 exprA가 exprB보다 큰 경우(-gt: great than) |
exprA -ge exprB |
산술연산 exprA가 exprB보다 크거나 같은 경우(-ge: great equal) |
exprA -a exprB |
exprA가 참이고 exprB가 참인경우(-a: and) |
exprA -o exprB |
exprA가 참이거나 exprB가 참인경우(-o: or) |
■ test 구문에서 사용되는 연산자
① 논리 부정 연산자(NOT)
다른 연산자와 함께 사용되며 파일 test에 이용된다.
if [ ! -s file ] ; then echo "file size is zero" fi |
② 괄호(Grouping)
실행 순서를 변경하기 위해 사용하며 괄호의 양쪽에는 공백이 필요하다.
그리고 의미없는 순수한 괄호의 의미를 사용하기 위해 괄호 앞에 백슬래쉬를 넣는다.
if find / ∖( -perm -4000 ∖) -o ∖( -perm -2000 ∖) -type f > /dev/null ; then echo "SetUID or SetGID Found" fi |
③ 논리곱 연산자(AND)와 논리합 연산자(OR)
fi [ ∖( "$VAR" -ge 0 ∖) -a ∖( "$VAR" -lt 10 ∖) ] ; then echo "$VAR is small number" fi if [ -n "$str" -o -r $HOME/.profile ] ; then echo "Hello, Test." fi |
④ 연산자 우선 순위
괄호 > 논리부정연산자(NOT) > 논리곱 연산자(-a) > 논리합 연산자(-o)
'Linux > ShellScript' 카테고리의 다른 글
ANSI Escape(ESC) character (0) | 2010.11.02 |
---|---|
쉘내부 명령어 (0) | 2010.10.28 |
[script]directory tree로 보여주기 (0) | 2010.05.29 |
[Script] 파일 점검 프로그램 (0) | 2010.05.23 |
쉘(Shell) 환경 (0) | 2010.05.16 |
[로그인 쉘에 따른 초기화 파일]
쉘(Shell) 종류 | 시스템전역 초기화파일 (로그인쉘) | 사용자 초기화 파일 (로그인쉘) | 사용자 초기화파일 | |
본쉘(sh) | /etc/profile | $HOME/.profile |
| |
콘쉘(ksh) | /etc/profile | $HOME/.profile $HOME/.kshrc | $HOME/.kshrc | |
C쉘(csh) | /etc/.login | $HOME/.cshrc $HOME/.login | $HOME/.cshrc | |
배쉬(bash) | /etc/profile | $HOME/.bash_profile $HOME/.profile | $HOME/.bashrc |
(1). 초기화 파일
-로그인쉘 프로그램은 시작된 후에 가장 먼저 /etc/profile 파일을 검사
-파일안의 명령어들을 실행시킨 다음, 초기화 파일인 .profile을 사용자의 홈 디렉토리에서 차자 실행.
*초기화에 사용되는 파일들은 /etc/skel 디렉토리에서 확인할수 있다.
(2). /etc/profile
-시스템의 모든 사용자들을 위한 설정파일로 관리자에 의해 관리되는 파일.
-쉘을 쓰는 사용자가 로그인 하는 경우 가장 처음으로 읽혀지는 파일이며 로그인시에 한번 읽혀짐.
(3). ~/.profile
-사용자의 홈디렉토리에 존재하는 .profile 안에는 개인적인 변수 설정
-쉘프롬프트 설정, 터미널 설정등 다양한 개인적인 설정을 할 수 있다.
(4). 주 프롬프트
-주 프롬프트의 기본값은 일반사용자는 달러 기호($)이고 root 사용자는 샵기호(#).
-주 프롬프트는 PS1 변수로 설정할수 있고 사용자의 홈디렉토리에 존재하는 ~/.profile에 정의한다.
# PS1="`uname -n> `"
# export PS1
[참고] 쉘 프롬프트 정의
쉘프롬프트: [root@Solaris10:/]#
(ksh ) # PS1=[$LOGNAME@`hostname`:'$PWD]# '
(bash) # PS1='[\u@\h:\w]\$'
(5). 보조 프롬프트
PS2 프롬프트는 보조 프롬프트이다. 이 프롬프트의 값은 표준 에러에 출력된다. 표준 에러의 기본값
은 화면이다. 이 프롬프트는 사용자가 명령어를 제대로 입력하지 않고 캐리지 리턴키를 눌렀을 때 나
타난다. 아직 명령어가 완료되지 않았음을 나타내고 명령어의 나머지 부분을 입력하면 정상적으로 수
행이 가능해 진다.
$ echo "hello
> there"
hello there
(6) 검색 경로
-본셀은 명령행에서 입력된 명령어의 위치를 찾기 위해 변수 PATH을 사용한다.
-경로들은 콜론(:)으로 구분하여 나열한다.
-검색은 목록의 왼쪽 디렉토리에서 오른쪽 디렉토리의 순서로 진행된다.
-경로의 맨 마지막에 지정한 마침표(.)는 현재 작업 디렉토리를 나타낸다.
-검색경로내에 등록되어 있는 어떤 디렉토리에서도 명령어를 찾지 못하면,
본쉘은 표준 에러로 "filename: not found" 와 같은 메시지 를 내보낸다.
-일반사용자는 검색경로 PATH 변수를 ~/.profile에 선언하여 사용한다.
(7) hash 명령어
hash 명령어는 명령어의 검색을 효율적으로 처리하기 위해 내부적으로 해시 테이블을 유지한다. 명령
어가 입력될 때마다 경로를 검색하는 대신, 처음 입력되었을 때만 경로를 이용하여 검색하고, 찾아낸
경로를 쉘 메모리에 저장한다. 동일한 명령어가 다시 입력되면, 쉘은 명령어를 해시 테이블에서 찾아
낸다. 이러한 과정은 전체 경로를 검색하는 것보다 상당히 빠르게 명령어를 찾을 수 있도록 도와준
다.
hash 명령어의 출력은 쉘이 테이블 내의 명령어를 사용한 빈도수(hits)와 명령어를 찾는데 소요되는
상대적인 비용(cost) 두가지이다. 여기서 비용이란 쉘이 명령어를 찾기 위해 검색 경로 상에서 하위
디렉토리로 내려간 단계를 의미한다. hash 명령어에 -r 옵션을 사용하면 테이블을 지운다.
(8) 마침표(.) 명령어
-마침표(.)는 본 쉘의 내부 명령어이다.
-이 명령어는 스크립트의 이름을 인자로 받아서 현재 쉘 환경에서 실행시킨다.
-즉 자식 프로세스를 새로 생성하지 않고 스크립트를 실행한다.
-스크립트 내에서 정의된 모든 변수들은 현재 쉘 환경의 일부가 되며,
마찬가지로 현재 쉘에서 정의한 모든 변수들도 스크립트 환경의 일부가 된다.
-일반사용자의 환경파일인 .profile 수정후에 재로그인 없이 마침표(.)명령어를 사용하여 적용
'Linux > ShellScript' 카테고리의 다른 글
ANSI Escape(ESC) character (0) | 2010.11.02 |
---|---|
쉘내부 명령어 (0) | 2010.10.28 |
[script]directory tree로 보여주기 (0) | 2010.05.29 |
[Script] 파일 점검 프로그램 (0) | 2010.05.23 |
[if연산] test 관련 연산자 (0) | 2010.05.23 |