4-1 쉘의 이해
- 쉘 기능 및 종류
- 쉘 : 명령어 해석기, 커널과 직접적으로 연결되어 해석 결과를 거널로 보냄
- 본 쉘
- 스티븐 본이 개발하였으며, 강력한 명령 프로그래밍 언어 기능을 갖추고 있음
- 상호 대화형 방식을 사용하지 않음
- C쉘
- 데이브 콘이 개발하였으며, 사용하기 편리하고, 기능이 탁월하다
- 멸옇앵 편집 기능을 제공
- 배시
- 브라이언 폭스가 개발하였으며, sh 호환의 멸영어 해석기
- 처음 로그인 했을 때 디폴트로 주어지는 쉘이다
- 특수문자
$
: 변수 접근 기호- 예시
$value
: 변수 value$SHELL
: 환경변수 SHELL. 사용하는 쉘의 위치가 저장되어 있음
- 예시
\
: 이 문자 뒤에 나오는 특수문자는 문자로 처리된다#
: 주석 처리 문자*
: 0개 이상의 문자가 일치함을 나타내는 치환 문자-
예시
a*e
: apple, ace 등의 문자가 포함됨
-
?
: 1개의 문자가 일치함을 나타내는 치환 문자-
예시
a?e
: ace, are, age 등의 문자가 포함됨
-
"
: `` ` ,\
를 제외한 모든 특수문자를 일반문자로 처리- 예시
# echo "$HOME, $USER"
: 환경변수 HOME과 USER의 값을 출력한다 결과 : `/home,/fedora, fedorauser
- 예시
'
: 모든 특수문자를 일반문자로 처리-
예시
# echo '$HOME, $USER'
: $HOME, $USER을 그대로 출력
-
- `` ` : 역따옴표로 감싼 문자열을 명령어로 해석
-
예시
echo `pwd`
: pwd를 명령어로 해석하여 pwd 명령의 결과를 출력
-
4-2 쉘 프로그래밍
- 프로그래밍에 쓰이는 명령어 정리
- echo 명령어 : 인수로 저장된 문자열이나 환경변수를 출력
- [-n] : 개행없이 출력
- read 명령어 : 인수로 지정된 변수에 값을 입력받음.
- let/expr 명령어 : 수식 연산을 위한 명령어
- echo 명령어 : 인수로 저장된 문자열이나 환경변수를 출력
- 특수변수 / 매개변수 확장
- $? : 마지막으로 실행된 프로세스의 상태값을 나타냄
- $0 : 현재 스크립트의 이름
- $1 : 첫번째 인수
- ${#변수} : 문자열의 길이
-
예시
# echo ${#value}
: value=”333”이라면 3이 출력
-
- ${변수:위치} : 위치로부터 문자열 출력 (0부터 시작)
-
예시
# echo ${value:3}
: value=”string”이라면 ing 출력
-
- 여러가지 함수들
- [조건문] if문
- 형식
if[조건] then 명령어 elif[조건] then 명령어 else 명령어 fi
- 조건문 작성법
- [A -it B] : A가 B보다 작다
- [A -eq B] : A와 B가 같다
- [A -qt B] : A가 B보다 크다
- [A -qe B] : A가 B보다 크거나 같다
- [A -le B] : A가 B보다 작거나 같다
- [A -ne B] : A가 B와 다르다
- 형식
- [조건문] case문
- 형식
case 변수 in 패턴1) 명령어;; 패턴2) 명령어;; … esac
- “*)”은 아무 패턴과 일치하지 않을 때 수행되어지는 구간이다
- 형식
- [반복문] for문
- 형식
for 변수 in 값 do 명령어 done
- 형식
- [반복문] while문
- 형식
while[조건] do 명령어 done
- 형식
- [반복문] until문
- 형식
until[조건] do 명령어 done
- 형식
- [조건문] if문
4-3 내장 명령어와 기타 내용
- 출력 명령어
- cut 명령어 : 파일에서 필드를 뽑아내서 출력
- [-f] : 잘라낼 필드를 지정
- [-d] : 필드를 구분하는 문자를 지정
- [-c] : 잘라낼 곳의 글자 위치를 지정
- more/less 명령어 : 내용이 많은 파일을 출력할 때 사용하는 명령어
- [-f] /[SpaceBar] : 한페이지 뒤로 이동
- [-b] : 한 페이지 앞으로 이동
- tail 명령어 : 파일의 내용을 뒷부분부터 출력
- [-n] : 지정한 줄만큼 출력
-
head 명령어 : 파일의 내용을 앞부분부터 출력
- cat 명령어 : vkdlfdml sodyddmf ghkausdp cnffur
- [-n] : 행 번호를 붙여서 출력
- [-b] : 행 번호를 붙여서 출력하되, 비어있는 행은 제외
- [-s] : 비어있는 2개 이상의 빈 행은 하나의 행으로 출력
- [-v] : 탭 문자와 End 문자를 제외한 제어 문자를 ‘^’로 출력
- [-T] : 탭 문자(‘^’)를 출력
- [-E] : (End) 행마다 끝에 ‘$’문자를 출력
- [-A] : 모든 제어문자를 출력
- cut 명령어 : 파일에서 필드를 뽑아내서 출력
- find 명령어
- 형식 :
# find [검색 디렉토리][옵션]
- 주요 옵션
-
[-name] : 파일 이름으로 검색
-
[-perm] : 권한(permission)으로 검색
-
예시
# find / -perm -4000
: 루트 디렉토리 이하에 있는 권한이 최소 4000을 만족하는 파일을 검색# find /etc -perm -777
: /etc 디렉토리 이하에 있는 권한이 777인 파일을 검색
-
-
[-user] : 사용자 이름으로 검색
-
[-type] : 파일 종류로 검색
-
[-exec] : 검색한 파일들에 대한 특정 명령을 수행
-
예시
# find / -name "*.c" -exec rm -rf {} \;
루트 디렉토리 이하에 있는 파일 이름이.c
로 끝나는 파일을 모두 삭제
-
-
[-ok] : exec와 같은 기능을 수행하지만 명령 실행할 때마다 실행 의사를 물어봄
-
[-mtime] : 파일이 마지막으로 수정된 날짜에 대한 검색을 수행
-
[-atime] : 파일에 마지막으로 접근한 날짜에 대해 검색을 수행
-
[-ctime] : 파일이 마지막으로 권한이 변경된 날짜에 대해 검색을 수행
-
예시
# find . -name "*.sh" -mtime+1
: 현재 디렉토리 이하에 있는 파일 이름이.sh
로 끝나는 파일 중 수정시간이 1일 이전인 파일을 검색
-
-
- 형식 :
-
grep 명령어
- 형식 :
# grep [옵션][정규표현식][검색 대상 파일/디렉토리]
- 주요 옵션
- [-n] : 행번호를 같이 출력
- [-v] : 해당 패턴이 들어가지 않은 행을 출력
- [-i] : 대소문자 구분 안함
- [-e] : 정규표현식 사용을 명시
- 정규표현식
^
: 해당 문자로 시작$
: 해당 문자로 끝[]
: 대괄호 안에 있는 문자 집합 중 하나와 일치.
: 하나의 문자를 의미*
: 선행하는 문자열이 0개 이상 일치
- 형식 :
- history 명령어
- 콘솔에 입력하였던 명령어들의 히스토리를 출력
- [-c] : 기존 히스토리를 모두 삭제
- 관련 명령
- !! : 바로 전에 사용한 명령을 다시 수행
- ![숫자] : 해당 history 번호로 명령을 다시 수행
- ![문자열] : 해당 문자열이 들어간 가장 최근 명령을 다시 수행
-
date 명령어
- 형식 :
# date [옵션][포맷]
- 주요 포맷
+%Y
: 년도를 출력+%m
: 월을 출력+%d
:일을 출력+%H
: 시를 출력+%M
:분을 출력
- 예시
# echo `date +%Y%m%d%H%M
: 202002080113 (2020년 02월 08일 1시 13분일 경우)
- 형식 :