linux class(new) 2 페이지

본문 바로가기
사이트 내 전체검색


회원로그인

linux class(new)

shell 및 shell script

페이지 정보

작성자 admin 작성일16-02-11 16:41 조회1,404회 댓글1건

본문

shell
사용자와 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 이다.


접속자집계

오늘
113
어제
75
최대
611
전체
448,163
개인정보취급방침 서비스이용약관 twoseven.kr All rights reserved.
상단으로