shell 및 shell script
페이지 정보
작성자 admin 작성일16-02-11 16:41 조회1,404회 댓글1건관련링크
본문
사용자와 Unix 커널사이의 인터페이스 역할을 하는 프로그램.
사용자가 내린 명령어를 해석하여 커널에게 전달하는 역할을 한다
명령어 해석기로도 불린다.
shell 의 역할
- 입력을 읽고 해당 명령행을 분석
- 특수문자 평가
- 파이프, 리디렉션, 백그라운드 프로세스를 처리
unix 주요 shell
1.bash(bourne again shell) : 리눅스의 기본셀. 편리한 사용자 인터페이스 및 본셀과 비교하여
확장된 문법제공.
본셀과는 기본적으로 호환됨. 명령행 편집기능 제공. GNU 프로젝트에 의해 만들어지고 배포됨.
2. sh(bourne shell) : steven bourne 이 개발한 최초의 대중화 된 유닉스 셀
명령행 편집기능을 제공하지 않는다.
3.csh(c shell) : billy joy에 의해 개발된 셀로 프로그래머들이 선호하는 셀.
linux 의 기본셀인 본셀과는 호환되지 않는다.
4. ksh(korn shell) : david korn이 개발. 사용자 인터페이스가 뛰어나고 본셀과도 호환되어 유닉스에서
가장 많이 사용하는 셀로 알려짐 명령행 편집기능 제공.
shell 설정파일
로그인 셀이 bash 인경우 로그인하면
/etc/profile => $HOME/.bash_profile => $HOME/.bashrc => /etc/bashrc file이 실행된다.
login shell 을 끝낼때 => $HOME/.bash_logout 실행이 되고 bash shell 명령어 사용기록은
$HOME/.bash_history 파일에 저장된다.
bash shell 변수
1. 환경변수
- 주로 대문자만 사용
- 미리 정의되어 있다.
- shell 환경을 편리하게 사용할 수 있게 env 명령어로 볼수 있다.
- sub shell에서도 사용.
- 많은 환경변수는 login 할때 자동으로 설정된다.
env (environment)로 확인할수 있다.
user1 /home/user1:$ env
HOSTNAME=vega
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
QTDIR=/usr/lib64/qt-3.3
QTINC=/usr/lib64/qt-3.3/include
.... 이하 생략 ...
2. 사용자정의변수
- 사용자가 필요할때마다 임시로 만들어서 사용
- 주로 소문자만 사용
- 현재셀에서만 사용가능
user1 /home/user1:$ a=100
user1 /home/user1:$ b="hello unix"
user1 /home/user1:$ echo "a = $a, b = $b"
a = 100, b = hello unix
user1 /home/user1:$
- 사용자 정의변수를 export 명령의 인수로 사용하면 환경변수가 된다.
user1 /home/user1:$ export b
user1 /home/user1:$ env | grep -E -w 'a|b'
b=hello unix ; a 는 export 하지 않았으므로 변수 b만 출력되었음.(변수b는 환경변수)
user1 /home/user1:$
3. shell 내장변수
- shell 에 내장되어 있다.
- 변수명이 직접 정의할수 없는 특수문자나 숫자만으로 되어 있다.
$0 $1 .... $n => 위치매개변수
$# => 인수의 갯수
$* => 모든 인수
$@ => 모든 인수
$? => return value
$$ => 현재 process id
shell 내장변수를 테스트하기 위해서 아래와 같이 간단한 파일을 작성한다
user1 /home/user1:$ cat var.sh
echo "shell 내장변수 테스트"
echo " ---------------------- "
echo "1 : $0 $1 $2 $5"
echo "2 : $#"
echo "3 : $*"
echo "4 : $@"
echo "5 : $?"
echo "6 : $$"
user1 /home/user1:$
작성후 실행은 아래처럼 bash 의 인수로 실행하면 된다.
user1 /home/user1:$ bash var.sh
shell 내장변수 테스트
----------------------
1 : var.sh
2 : 0
3 :
4 :
5 : 0
6 : 2833
user1 /home/user1:$
또는 실행퍼미션을 주고 아래처럼 실행할수도 있다.
user1 /home/user1:$ ./var.sh
-bash: ./var.sh: 허가 거부 ; 퍼미션 에러
user1 /home/user1:$ ls -l var.sh
-rw-rw-r--. 1 user1 user1 161 2016-02-11 16:07 var.sh ; 실행권이 없다.
user1 /home/user1:$ chmod u+x var.sh ; 소유주한테 실행권한 부여
user1 /home/user1:$ ./var.sh
shell 내장변수 테스트
----------------------
1 : ./var.sh
2 : 0
3 :
4 :
5 : 0
6 : 2859
user1 /home/user1:$
- shell 내장변수는 인수를 처리하기 위해서 사용되는 경우가 많다.
그래서 아래처럼 인수를 주고 실행을 해야 이해하기가 쉽다.
user1 /home/user1:$ ./var.sh 100 "hello unix" 200 300
shell 내장변수 테스트
----------------------
1 : ./var.sh 100 hello unix
2 : 4
3 : 100 hello unix 200 300
4 : 100 hello unix 200 300
5 : 0
6 : 2889
user1 /home/user1:$
댓글목록
admin님의 댓글
admin 작성일
참고
su 계정 / su - 계정 차이점
su(substitute user, switch user)
su - 계정
변경하는 계정권한의 login shell 이 실행된다.
su 계정
변경하는 계정권한의 일반 shell 이 실행된다.
login shell : login 할때 자동으로 실행되는 shell 이며 bash shell 인경우
/etc/profile -> $HOME/.bash_profile -> $HOME/.bashrc -> /etc/bashrc
이 설정파일들이 자동으로 실행이 된다.
일반 shell : bash shell 인 경우 $HOME/.bashrc -> /etc/bashrc 가 자동으로 실행이 된다.
/etc/profile 과 $HOME/.bash_profile 은 일반적으로 환경변수를 등록해서 사용하는 파일
$HOME/.bashrc 와 /etc/bashrc 는 일반적으로 alias 같은 명령어나 주로 일반변수를 등록해서
사용하는 파일이다.
환경변수 : 현재 shell 에서 설정한 변수를 자식 shell 에서도 그대로 사용가능하다.
일반변수 : 현재 shell 에서 설정한 변수는 자식 shell 에서 사용할수 없다.
alias : 현재 shell 에서 설정한 alias 는 자식 shell 에서는 사용할 수 없다.
실행중인 shell 이 login shell 인지 일반 shell 인지는 ps -f 명령어로 간단히 확인할 수 있다.
ps -f 로 출력했을때
shell 프로세스가 -bash 로 출력되면 login shell , 그리고 bash 로 출력되면 일반 shell 이다.