shell 은 운영체제의 커널과 사용자 사이를 이어주는 역할을 한다.
Bourne Shell (sh)
- 오리지널 유닉스 쉘
- AT&T Bell 연구소에서 개발
- root의 기본 Shell
C Shell (csh)
- 1976년에 개발
- C 언어 기반으로 개발
- BSD 계열에서 많이사용
- 근대적인 shell의 시초
- 사용자의 편의성을 제공
Korn Shell (ksh)
- Bourne Shell의 기능 추가 버전
- Bourne Shell + 사용자 편의 기능
Bash
- linux에서 주로 사용
- Korn + C Shell의 장점을 추가
- 방향키를 사용 가능
- 색상을 지원
쉘 스크립트
장점
- 만들기 쉬워
- 이식성이 좋다
- 컴파일을 하지 않아도 됨
단점
- 컴파일된 파일에 비해 속도가 늦음
shell command
# sh test_name
error
# sh -x test_name
# sh -v test_name
옵션 | 설명 |
---|---|
-v | 에러메세지가 발생한 라인을 출력한다. |
-x | 각각의 명령이 일어나는 부분을 출력하여준다. |
# 다중 명령어 사용(; , && , ||)
1) 세미콜론(;)
- 하나의 명령어 라인에서 여러 개의 명령을 실행(하나의 명령어 다음에 추가)
- 첫 번째 명령이 실패하여도 두 번째 명령은 반드시 실행이 됨.
first command
second command
[root@secondary ~]# linux; date
-bash: linux: command not found
2013. 09. 04. (수) 11:21:39 KST
2) 더블 엠퍼센드(&&)
- 첫 번째 명령이 에러 없이 정상적으로 종료했을 경우에만 두 번째 명령을 수행
date: invalid date `test'
[root@secondary ~]# date && printf "second command\n"
2013. 09. 04. (수) 11:35:22 KST
second command
3) 더블 버티칼바(||)
- 첫 번째 명령의 결과에서 에러가 발생하더라도 각각의 모든 명령을 수행
date: invalid date `test'
second command
> 3가지 연속적 사용
-bash: test1: command not found
date: invalid date `test'
second command
third command
last command
> 명령어 라인을 두번 실행(!#)
date; date; -- 변환된 명령어 라인
2013. 09. 04. (수) 11:45:15 KST
2013. 09. 04. (수) 11:45:15 KST
[root@secondary ~]# date; date;
2013. 09. 04. (수) 11:45:32 KST
2013. 09. 04. (수) 11:45:32 KST
date 명령을 수행한다음 2초후 date 명령을 한 번 더 실행
date; sleep 2; date; sleep 2; -- 변환된 명령어 라인
2013. 09. 04. (수) 11:46:26 KST
2013. 09. 04. (수) 11:46:28 KST
# 명령 반복 실행
while true; do [실행할 명령]; sleep [반복단위:초]; done;
2초 간격 시스템 용량확인(df -k) 명령 실행
정규 표현식(정규식, regular expression)에서 메타 문자(meta character)들은 특별한 뜻이 담기어 문자열 양식을 나타내는 데에 쓰인다. 아래에 특수기호로 나타내는 메타 문자의 뜻과 정규 표현식에 맞는 문자열의 보기를 정리하였다.
1) ^
- 문자열의 처음을 나타냄
식 | 뜻 | 맞는 문자열 |
---|---|---|
^group | group으로 시작하는 문자열 | group, groups, group program, … |
2) $
- 문자열의 끝을 나타냄
식 | 뜻 | 맞는 문자열 |
---|---|---|
ing$ | ing로 끝나는 문자열 | ing, sing, hosting, booting, … |
^code$ | code로 시작하고 끝남 | code |
3) .
- 임의의 한 문자를 나타냄
식 | 뜻 | 맞는 문자열 |
---|---|---|
a.b | a와 b 사이에 한 문자가 낀 문자열 | aab, abb, acb, … |
ab. | ab 다음에 한 문자가 붙은 문자열 | aba, abb, abc, … |
a..b | a와 b 사이에 두 문자가 낀 문자열 | a11a, aabb, abbb, … |
^.ape | ape 앞에 한 문자가 낀 문자열로 시작함 | tape, caper, … |
4) *
- 바로 앞의 문자가 없거나 하나 이상 있음
식 | 뜻 | 맞는 문자열 |
---|---|---|
m*r | r 앞에 m이 없거나 하나 이상 있음 | r, mr, mmr, mmmr, … |
mr*s | m 다음에 r이 없거나 하나 이상 있고 s가 맨 뒤에 있음 | ms, mrs, mrrs, mrrrs, … |
mrs* | mr 다음에 s가 없거나 하나 이상 있음 | mr, mrs, mrss, mrsss, … |
5) +
- 바로 앞의 문자가 하나 이상 있음
식 | 뜻 | 맞는 문자열 |
---|---|---|
m+r | r 앞에 m이 하나 이상 있음 | mr, mmr, mmmr, … |
mr+s | m 다음에 r이 하나 이상 있고 s가 맨 뒤에 있음 | mrs, mrrs, mrrrs, … |
mrs+ | mr 다음에 s가 하나 이상 있음 | mrs, mrss, mrsss, … |
6) ?
- 앞의 문자가 없거나 하나임
식 | 뜻 | 맞는 문자열 |
---|---|---|
ws?p | w와 p 사이에 s가 하나 있거나 없음 | wp, wsp |
7) [ ] (꺾쇠묶음, 대괄호)
- 꺾쇠묶음는 한 문자를 가리킴
- 묶음 안의 내용은 가리키는 문자의 범위를 나타냄 (문자 클래스로서 정규 표현식과는 언어과 다름)
- 특정한 문자열을 제외하려면 묶음 안에서 '^'를 씀
식 | 뜻 | 맞는 문자열 |
---|---|---|
[w]s | s 앞에 w가 붙음 | ws |
[ws]p | p 앞에 w나 s가 붙음 | wp, sp |
[a-z]8 | 8 앞에 잔 로마자(소문자) 하나가 붙음 | a8, b8, c8, … , z8 |
[a-zA-z][0-9] | 로마자 하나 뒤에 숫자 하나가 붙음 | a0, b5, K3, … |
[^w]s | s 바로 앞에 w가 아닌 문자 하나가 붙음 | as, 2s, es, … |
[^ws]p | p 바로 앞에 w나 s가 아닌 문자 하나가 붙음 | ap, hp, op, … |
[^a-z]8 | 8 바로 앞에 잔 로마자가 아닌 문자 하나가 붙음 | A8, C8, 38, #8, … |
^[^gh][^ij]$ | g나 h가 아닌 한 문자로 시작하고 i나 j가 아닌 한 문자로 끝남 (꺾쇠묶음 밖의 ^는 문자열의 처음을 나타냄) |
ab, ty, ig, jh, … |
8) { } (활짱묶음, 중괄호)
- 활짱묶음은 앞에 있는 문자의 개수를 나타냄
- 묶음 안에서 ','는 문자 개수의 범위를 나타낼 때 씀
식 | 뜻 | 맞는 문자열 |
---|---|---|
w{0}s | s 앞에 w가 없음 | s |
w{1}s | s 앞에 w가 하나 붙음 | ws |
ws{3}p | w가 앞에 오고 s가 셋 붙으면서 p가 뒤에 붙음 | wsssp |
w{1,3}s | s 앞에 w가 1~3개 붙음 | ws, wws, wwws |
w{,2}s | s 앞에 w가 두 개 이하 붙음 | s, ws, wws |
w{2,}s | s 앞에 w가 두 개 이상 붙음 | wss, wsss, … |
9) ( ) (손톱묶음, 소괄호)
- 손톱묶음 안의 문자열은 하나로 묶어서 다룸
식 | 뜻 | 맞는 문자열 |
---|---|---|
(ws)p | p 앞에 ws가 붙음 | s |
(ws){2}p | s 앞에 ws가 두 번 붙음 | wswsp |
[^(web)]p | p 앞에 web이 아닌 문자나 문자열이 옴 | ap, zzp, wp, wep, webpp, … |
10) | (위아랫금, 수직선)
- '또는', 'or'과 같은 뜻으로 선택문에 쓰임
식 | 뜻 | 맞는 문자열 |
---|---|---|
word|phrase | word 또는 phrase | word, phrase |
mount(ed|ing) | mounted 또는 mounting | mounted, mounting |
[^(a|b|c)].+ | a 또는 b 또는 c로 시작하지 않는 문자열 |
11) \ (거꿀빗금)
- 메타 문자의 성질을 없앨 때 붙임
식 | 뜻 | 맞는 문자열 |
---|---|---|
\[[^\[\]]+\] | 꺾쇠묶음으로 싸인 문자열 | [a], [ab], [abc], … |
[^\.]+\.(com|net) | com, net로 끝나는 바탕 도메인 이름 | a.com, b.net, … |
정규표현식
- 검색에 사용되는 여러 문자들의 패턴
- vi, vim, grep, sed, awk 등에서 상용
^ : 줄의 시작('^Pattern')
$ : 줄의 끝 ('Pattern$')
/< : 단어의 시작 ('/<love')
/> : 단어의 끝 ('love/>')
. : 하나의 문자가 일치 ('p.....n')
* : 모든 문자 ('[a-z]*')
.* : 모든 문자 ('a.*')
[] : 해당되는 문자 ('[Pp]attern')
[x-y] : 범위안의 문자 '[a-z]attern')
[^x-y] : 범위안에 해당하지 않는 문자 ('[^a-c]attern')
* 인용의 사용
> Single Quotes(' ') : - tab과 같은공백을 일반 문자로 인식
- 모든 문자를 일반 문자로 인식> Double Quotes(" ") : 대부분의 특수 문자들을 보호
- tab과 같은공백을 일반 문자로 인식
- `, $, \, ' 예외
> Backslash(\) : 다음에 나오는 문자의 특별한 의미를 제거
> Back Quotes(`) : 명령어 대체(command substitution)
> Dollar sign($) : 쉘 변수
Redirection
0 < : 기본 input (키보드)
1 > : 기본 output (모니터)
2 > : 기본 error (모니터)
2 > & 1 : 기본에러의 출력 방향을 기본 입력과 같도록 설정
2 > /dev/null
pipe
ex) who | wc
- who 실행결과를 stout으로 출력
- pipe는 앞 명령어의 표준 출력을 뒤 명령어의 표준 입력으로 전달
- wc는 파이프라인을 통해 who 명령어의 표준출력을 표준 입력으로 사용
- Redirection을 통해 who의 실행결과를 wc로 넘기기 위해서 중간단계의 파일이 필요하나 파이프를 사용할 경우 중간 단계의 파일이 생성되지 않음
----------------------------------------------------------------------
grep
- file에 내용이 포함된 문자를 검색
- 패턴, 정규표현식
- 검색된 라인을 화면에 표시
- 바이너리 파일, 어플리케이션 데이터는 검색이 불가
grep -옵션 패턴 filename
옵션
-i : 대소문자 구별하지 않음 --ignore-case
-l : 패턴이 있는 파일 이름만 출력하고 라인은 출력하지 않음 --files-with-matches
-n : 출력하는 각 라인 앞에 번호를 붙임. --line-number :
-v : 패턴이 없는 라인만 출력
-c : 패턴이 있는 라인의 수
-w : 패턴과 맞는 단어가 독립적인 경우만 출력
/etc/group에서 root가 있는 라인 숫자를 찾아라!!
/etc/group에서 root가 없는 라인 숫자를 찾아라!!
egrep
- grep의 확장 버전
- file의 내용을 검색
- 정규식/확장 정규식
- 검색된 라인을 화면에 출력
- 파일의 내용에는 영향이 없음
옵션
-i : 대소문자 구별하지 않음
-l : 패턴이 있는 파일 이름만 출력하고 라인은 출력하지 않음
-n : 출력하는 각 라인 앞에 번호를 붙임.
-v : 패턴이 없는 라인만 출력
-c : 패턴이 있는 라인의 수
-w : 패턴과 맞는 단어가 독립적인 경우만 출력
+ :a-z 문자로 시작하고 끝에 단어가 ask로 끝나는 단어를 출력, [a-z]+ask
x|y : 레드거나 그린인 라인을 출력, red | green
? : 앞의 문자가 1개 있는 또는 없는 라인을 출력 ,a?
(|) : searches 이거나 searching 이 포함된 라인 출력, search (es|ing)
fgrep
- 정규표현식, 확장 정규표현식을 사용하지 않아요
- 문자 그대로를 인식하여 출력
실습시나리오 (grep, egrep, fgrep)
1. sam을 포함하고 있는 모든 줄을 출력
grep sam* sam
2. 사람의 이름이 J로 시작하는 모든 줄을 출력
grep -i ^j name
3. 700으로 끝나는 모든 줄을 출력
grep '.700' name
4. 834를 포함하지 않는 모든 줄 출력
grep -v '.700' name
5. 생일 7월인 모든 줄을 출력
grep "....-7" birth
6. 전화번호의 지역코드가 031인 모든 줄을 출력
grep ^031 phone
grep 031$ phone
^는 시작 $는 끝
7. 대문자 하나, 이어서 4개의 소문자, 콤마, 스페이스에 하나의 대문자를 포함하는 모든 줄을 출력
grep "[A-Z][a-z][a-z][a-z][a-z], [A-Z]" name
8. 성이 K나 k로 시작하는 모든 줄을 출력
grep -i ^k name
정규표현식을 이용한 실습
1. ID@도메인 형태로 이루어진 e-mail을 검색 할 수 있는 정규 표현식작성
2. 핸드폰 번호를 검색 할 수 있는 정규 표현식 작성
3. ip주소를 검색 할 수 있는 정규표현식 작성
반복문!도 공부해야됌
http://blog.daum.net/_blog/BlogTypeView.do?blogid=0JHcJ&articleno=8382770&categoryId=267754®dt=20130716235124
#!/bin/sh echo "Enter a number between 1 and 10. " read NUM case $NUM in 1) echo "one" ;; 2) echo "two" ;; 3) echo "three" ;; 4) echo "four" ;; 5) echo "five" ;; 6) echo "six" ;; 7) echo "seven" ;; 8) echo "eight" ;; 9) echo "nine" ;; 10) echo "ten" ;; *) echo "INVALID NUMBER!" ;; esac
#!/bin/bash PS3='제일 좋아하는 야채를 고르세요: ' # 프롬프트 문자열 세트. echo select vegetable in "콩" "당근" "감자" "양파" "순무" do echo echo "제일 좋아하는 야채가 $vegetable 이네요." echo "깔깔~~" echo break # 여기에 'break'가 없으면 무한 루프를 돕니다. done exit 0 |
'생활' 카테고리의 다른 글
스카이디지탈 NKEYBOARD NKEY-P1 사용 후기. (0) | 2017.04.18 |
---|---|
사조영웅전 2006를 보고나서.. (0) | 2017.04.18 |
블로그 동영상 첨부 및 동영상 자동 재생 방법 (0) | 2017.04.15 |
mp3 플레이어 (0) | 2016.08.16 |
SQL 내용 간단 정리 (0) | 2016.07.20 |
댓글