1. Shell?
shell이란 kernel과 프로그램 및 사용자 인터페이스를 제공하는 중간 매개체이다.
사용자가 shell에서 제공하는 프롬프트를 이용하여 명령어를 입력하면 shell은 입력 받은 명령어를 kernel이 실행 할 수 있는 언어로 변환하여 전달 한 후 실행되기 때문에 보통 shell을 ‘명령어 해석기’라고 한다.
2. Shell 변경 및 확인
2.1. 사용 가능한 Shell 확인
# chsh –l or 또는 cat /etc/shells 를 입력하면 사용 가능한 shell 이 출력된다.
2.2. Shell 변경
다른 쉘로 변경하기 위해서는 프롬프트 상에서 “chsh”를 입력하면 새로운 프롬프트를 생성한다. 이때 바꾸고자 하는 쉘이 있는 패스를 적어주면 된다. 이렇게 쉘을 변경하게 되면 /etc/passwd 파일 내에서도 기존의 쉘이 새로 지정한 쉘로 변경된다. 또한 “chsh –s /bin/csh”를 실행하면 현재 로그인한 쉘을 변경하게 된다.
3. Shell 명령어
명령어 |
설명 |
: |
항상 명령어의 실행 값은 참을 반환하며 아무런 액션도 발생하지 않는다. 참값을 반환하기 때문에 “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 |
하위 프로세스가 종료 될 때 까지 대기 |
3.1. 기본적인 입력 명령어
3.1.1. 문자 출력 “echo”
옵 션 |
설 명 |
-n |
마지막 문자 “\n”을 출력 하지 않는다 |
-e |
\(역슬래쉬) 문자 번역 |
3.1.2. 정형화된 문자 출력 “printf”
C에서 제공하는 printf와 비슷한 기능을 제공
사용법 : printf format [argument]
#!/bin/bash
com=”computer”
printf “$com\n” à computer
printf “%s” $com à computer
printf “%s\t” com à com
printf “%s\n” “computer” à computer
printf “%s\n” “$com” à computer
3.2. 기본적인 출력 명령어
3.2.1. 사용자로부터 값을 입력 받는 “read”
사용법 : read [-t timeout] [-p prompt] [-a array] [-n nchars] [-d delim] 변수명
옵 션 |
설 명 |
-t |
사용자로부터 입력 받을 시간을 설정하여 입력한 시간을 초과하면 자동으로 넘어간다. |
-p |
입력 프롬프트의 형태를 지정하며 문자열을 이용하여 출력 |
-a |
입력 받은 변수가 배열임을 정의 |
-n |
입력 받을 값의 크기 설정(문자의 개수) |
-d |
지정한 문자열을 입력 할 때까지 입력 받음 |
-r |
입력한 이스케이프 문자를 인식 |
-s |
사용자로부터 입력 받은 문자를 프롬프트에 echo를 하지 않기 때문에 주로 패스워드 입력에 이용. 같은 명령어로 “sty –echo”는 프롬프트 echo 기능을 정지 하며 “sty echo”는 프롬프트 기능을 활성화 한다. |
ex) #read –p “Input name : “ –t 10 –n 5 read_value
※ 주의 : 변수를 대입 할 때 “변수 = 값”과 같은 형태로 사이에 스페이스를 넣게 되면 대입연산이 아니라 비교 연산이 된다.
4. 기본적인 쉘 스크립트
4.1 쉘 스크립트의 실행
만들어진 쉘을 실행하는데 sh 명령어를 이용하거나 또는 스크립트 파일의 실행권한을 활성화 하여 일반 실행 파일처럼 사용하면 된다.
4.2. 쉘 스크립트의 구분 인자
쉘 스크립트는 명령어와 명령어의 옵션 및 매개변수로 구분되며 명령어와 명령어의 구분인자로는 Enter 또는 ; 이며 명령어의 옵션 및 매개변수는 tab 또는 하나 이상의 space 로 구분 할 수 있다.
4.2.1 IFS – 인자 구분 매개 변수
IFS는 구분 인자를 저장하고 있는 변수로, 기본적으로 “space, tab, newline”이다. 만일 특정 문자를 구분인자로 설정하기 위해서 IFS 값을 다른 값으로 지정하여 사용 할 수 있다.
잘 못된 내용이나 의문사항은 kukuta@gmail.com으로 메일 주세요