- 쉘의 특성
리다이렉션(Redirection) : < << > >> 2> 2>>
파이프(pipe) : |
셀 자체의 기능(bash function) : set -o vi
변수(Variable) : export VAR=5
메타캐릭터(Metacharacter) : '' "" `` ;
히스토리(History) : history
환경파일(Environment Files) : /etc/profile, ~/.bash_profile, ~/.bashrc
- 리다이렉션
fd (file description, 파일 기술자 )
0 표준 입력 ( stdin ( keyboard ))
1 표준 출력 ( stdout ( screen ))
2 표준 에러 ( stderr ( screen ))
- 입력 리다이렉션
# CMD < file1
# CMD 0< file1
# cat < /etc/passwd
# mail -s "TEST" root < /etc/hosts
- 출력 리다이렉션
# CMD > file1
# CMD 1> file1
# CMD >> file1
# CMD 1>> file1
# ls -l > file.list
# echo 1111 > file1
# echo 2222 >> file1
# tty
# echo hello redirection > /dev/pts/2
# CMD 2> file1 /* 에러 리다이렉션 */
# CMD 2>> file1
# ls -l /test /nodir > file1 2>&1 /* file1에 정상출력과 에러 출력 입력 */
# ./configure --prefix=/usr/local/apache2 >apache.log 2>&1
$ find / -name core -type -f 2>/dev/null
- 파이프
# CMD | CMD
# CMD | CMD | CMD
# ps -ef | more
# ps -ef | grep httpd | grep -v grep | wc -l
# cal > cal.txt
# cal | tee cal2.txt /* 리다이렉션은 모니터에 출력없이 바로 cal.txt로 넣어버리지만 tee는 모니터에도 출력됨 */
# script -a /dev/null | tee /dev/pts/3 | tee /dev/pts4
- 쉘 자체의 기능
# set -o
# set -o vi
# set +o vi
- 변수
1. 지역변수
2. 환경 변수
3. 특수 변수
변수 선언 방법(env/set)
변수의 이름 : 대문자, 소문자, 숫자, _ ( 숫자는 맨 앞에 올수 없다. )
‘=’양쪽에 공백이 있으면 안된다. 모두 문자열로 인식 (숫자연산가능)
# VAR=5 /* 지역변수 선언 */
# export VAR /* 환경 변수로 선언 */
# echo $VAR /* 확인 */
# unset VAR /* 변수 삭제 */
변수의 export 의미 ( 지역변수 / 환경변수 )
# ps
# VAR1=5
# echo $VAR1
# bash
# echo $VAR1
# exit
# echo $VAR1
# VAR2=10
# export VAR2 (# export VAR2=10)
# echo $VAR2
# bash
# echo $VAR2
# exit
# echo $VAR2
***특수 변수
$$ : 현재 쉘의 PID 번호 저장(EX: 임시 파일 생성, /tmp/.tmp.$$)
$! : 바로 이전 수행된 백그라운드 프로세스의 PID 번호 저장
$? : 바로 이전 수행된 명령어의 return value 저장(0 ~ 255)
$* : 모든 인자($* == $@)
$# : 인자의 개수
$0 : 프로그램 이름
$1 : 프로그램에 대한 첫번째 인자
$2 : 프로그램에 대한 두번째 인자
$3 : 프로그램에 대한 세번째 인자
= 임시 파일을 생성하는 경우 ( $$ )
# echo $$
# ps
# touch /tmp/tmp.$$
# ls -l /tmp/tmp.*
[참고] mktemp ( 랜덤으로 파일이름 생성)
# mktemp /tmp/tmp.XXXXXXXX /* X의 개수만큼 랜덤으로 지정되어 파일을 만든다 */
/tmp/tmp.KPKy4724
= 바로 이전에 수행된 백그라운드 프로세스를 종료하는 경우
# sleep 20 &
# echo $!
# sleep 200 &
# kill $!
= 명령어의 정상 동작 유무 확인하는 경우 /* 0이면 정상 다른 숫자면 오류 */
# date
# echo $?
# cd /nodir
# echo $?
# echo hello linux
# echo hello linux
# echo 'hello linux '
"" : 큰 따옴표 ( double quotation )
# echo "$SHELL"
`` : 역 따옴표 ( back quotation ) sh -> ksh -> zsh -> bash
# date
( sh ) # echo `date`
(ksh) # echo $(date)
# echo " `date` is time "
# touch backup+`date +%m%d`.tar.gz
\ : 백 슬래쉬 ( back slash )
# echo $SHELL
# echo \SHELL ( # echo '$SHELL' )
# find / -type f -exec grep -l Error {} \;
# find / -type f -exec grep -l Error {} ';'
# find / -type f -exec grep -l Error {} ";"
; : 세미콜론 ( semicolon )
# date ; ls ; cal
= 함수
# a () { ls ; date ; cal ; }
# a
# typeset -f
# unset -f a
= 환경 파일
/etc/profile
~/.bash_profile
~/.bashrc
= 기타 ( Hero Documentation (연속) ) cat CMD + Here Documentation
1. 출력내용이 많은 text를 효율적으로 출력하기 위한 방법
2. 선책하는 메뉴를 출력하기 위한 방법
3. 명령어 입력값으로 사용하기 위한 방법
으로 사용된다.
EX ) vi test.sh
#!/bin/bash
cat << _EOF
----------------------------
| hello world
|
-----------------------------
_EOF
/* tab으로 메뉴를 만들거나 글이 많을경우에 echo 명령어보다 더 편하게 쓸수 있다 */
- 조건부 실행
- eval CMD
'Security > shell scripts' 카테고리의 다른 글
쉘 스크립트 예제 (0) | 2017.10.10 |
---|---|
쉘 스크립트 작성하기_(반복문) (0) | 2017.10.10 |
쉘 스크립트 작성하기(조건문) (0) | 2017.10.02 |
쉘 스크립트 (0) | 2017.09.27 |