Language/Unix

[펌] UNIX SHELL Program

OIZTLOMO 2010. 9. 27. 14:26

SHELL


사용자와 Unix 커널사이의 인터페이스 역할을 하는 프로그램.
. 사용자가 내린 명령어를 해석하여 커널에게 전달하는 역할을 한다.. 명령어 해석기로도 불린다.?.shell 의 역할- 입력을 읽고 해당 명령행을 분석.- 특수문자 평가- 파이프, 리디렉션, 백그라운드 프로세스를 처리
unix 주요 shell 
1.bash(bourne again shell) : 리눅스의 기본셀. 편리한 사용자 인터페이스 및 본셀과 비교하여?확장된 문법제공. 본셀과는 기본적으로 호환됨. 명령행 편집기능 제공. GNU 프로젝트에 의해 만들어지고 배포됨.
2. sh(bourne shell) : steven bourne 이 개발한 최초의 대중화 된 유닉스 셀??? 명령행 편집기능을 제공하지 않는다. 
3.csh(c shell) : billy joy에 의해 개발된 셀로 프로그래머들이 선호하는 셀.unix 의 기본셀인 본셀과는?호환되지 않는다. 변수선언부터 다르다
4. ksh(korn shell) : david korn이 개발. 사용자 인터페이스가 뛰어나고 본셀과도호환되어 유닉스에서 가장 많이 사용하는 셀로 알려짐. 명령행 편집기능 제공.
*. shell (login shell인경우)설정 파일.
1.bash shell /etc/profile => $HOME/.bash_profile => .bashrclogin shell 을 끝낼때 ; $HOME/.bash_logout 그리고 bash shell 사용기록을 저장하는 $HOME/.bash_history 라는 파일이 있다. bash shell을 사용하는 사용자가 logout 시 그때까지의 기록을 추가한다.
2. csh/etc/.login =>? $HOME/.cshrc => $HOME/.login


### shell 문법

변수.
환경변수 - 미리 정의된 변수 (shell 환경과 관련된 변수)
특징 - 대문자만 사용 (묵시적 약속)

(env는 기본적인 환경변수를 보여주지만 set는 전체 환경변수를 보여준다.)

 -------------------------------
 server [/tmp]#
 server [/tmp]# env
 _=/bin/env
 MANPATH=/usr/share/man:/usr/dt/share/man
 LANG=ko
 HZ=100
 PATH=/bin:/usr/bin:/usr/sbin:/sbin:/usr/dt/bin:/usr/openwin/bin:/usr/ccs/bin
 LOGNAME=root
 MAIL=/usr/mail/root
 SHELL=/bin/ksh
 HOME=/
 TERM=xterm
 PWD=/tmp
 TZ=ROK
 ENV=/.kshrc
 server [/tmp]#
 ------------------------------


### 사용자 정의 변수
특징 - 소문자만 사용 (묵시적 약속)
사용자 정의변수를 export 명령을 주게되면 환경변수가 된다.

 -------------------------------
 server [/tmp/shell]# 
 server [/tmp/shell]# cat ./var.sh
 a="A  B   C   D"
 echo $a
 echo "$a"
 echo '$a'
 echo \$a
 echo a
 echo ${a}
 echo `$a`
 server [/tmp/shell]# 
 server [/tmp/shell]# 
 server [/tmp/shell]# ./var.sh
 A B C D
 A  B   C   D
 $a
 $a
 a
 A B C D
 ./var.sh[8]: A:  not found
 server [/tmp/shell]# 
 server [/tmp/shell]# 
 -------------------------------


### shell 내장변수
특징 - 사용자가 정의 할 수 없는 변수명 사용
$0 , $1 ... $n ==> 위치 매개변수
$# ==> 인자의 갯수를 저장하는 변수
$* ==> 모든 인자를 저장하는 변수
$@ ==> 모든 인자를 저장하는 변수
$? ==> 리턴값을 저장하는 변수
$$ ==> 현재 프로세스 id를 저장하는 변수

 -------------------------------
 server [/tmp/shell]# 
 server [/tmp/shell]# cat aaa.sh
 echo "$0 $1 $2 $5"
 echo "$#"
 echo "$*"
 echo "$@"
 echo "$?"
 echo "$$"
 server [/tmp/shell]# 
 server [/tmp/shell]# ./aaa.sh 111 222 333 444
 ./aaa.sh 111 222 
 4
 111 222 333 444
 111 222 333 444
 0           <-- (0이면 True / 1~255이면 False)
 1015
 server [/tmp/shell]# 
 -------------------------------


### 조건 판단명령어
test ==> check file types and compare values

# 연산자
==> 문자열비교
[string] : string이 빈 문자열이 아니라면 참
["string1" = "string2"] : 두 문자열이 같으면 참
[“string1" != "string1" ] : 두 문자열이 같지 않으면 참.
[ -n "string" ] : 문자열이 null(빈 문자열) 이 아니라면 참.
[ -z "string" ] : 문자열이 null(빈 문자열)이라면 참

==> 산술비교
[ expr1 -eq expr2 ] : 두 표현식 값이 같다면 참.BR>[ expr1 -ne expr2 ] : 두 표현식 값이 않다면 참.
[ expr1 -gt expr2 ] :  expr1 이 expr2 보다 크다면 참
[ expr1 -ge expr2 ] : expr1 이 expr2 보다 크거나 같으면 참
[ expr1 -lt expr2 ] : expr1 이 expr2 보다 작다면 참
[ expr1 -le expr2 ] : expr1 이 expr2 보다 작거나 같으면 참

==> 파일조건
[ -b file ] : file이 block device file이면 참
[ -c file ] : file이 character device file 이면 참
[ -d file ] : file이 directory file이면 참
[ -f file ] : file이 정규파일이면 참
[ -r file ] : file이 읽기권한이면 참
[ -w file ] : file이 쓰기권한이면 참
[ -x file ] : file이 실행권한이면 참
[ -L file ] : file이 symbolic link file이면 참
[ -e file ] : file이 존재하면 참
[ -s file ] : file의 용량이 0보다 크면 참


### 산술연산자
sh 경우
expr로 산술연산 처리
 -------------------------------
 ex) expr 2 \* 5
 -------------------------------

ksh 경우
expr 또는 (( 수식 ))

제어문, 배열(1차원), 함수(call by value)


read $n ==> 쉘 스크립트 실행 후 값을 입력 받음


2. if 구문.

==> 단순 if 문
if [ 조건 ]
then
    실행문장
fi

==> if ~else 문
if [ 조건 ]
then
    실행문장
else
    실행문장
==> if ~ else if 문
if [ 조건 ]
then
 실행문장
elif [ 조건 ]
then
  실행문장
fi

==> 다중 if 문
if [ 조건 ]
then
    if [ 조건 ]
    then
         실행문장
    fi
fi

3. and list / or list
and list
실행문장 && 실행문장 && 실행문장 && ....
거짓이 될 때까지 실행문장을 실행한다.

or list
실행문장 || 실행문장 || 실행문장 || ...
실행문장이 참이 될 때까지 실행한다.

and list 및 or list의 혼용
[ 조건 ] && 문장1 || 문장2
위에서 조건이 참이면 문장1을 수행하고 거짓이면 문장2를 수행한다.


4. case 구문
case 변수 in
  패턴 | 패턴 | ... )
 문장 ;;
  패턴 | 패턴 | ...)
         문장;;
  *)  문장 ;;
esac

 -------------------------------
 ex) 10문항의시험문제 점수 처리
 -------------------------------
 server [/tmp/shell]# 
 server [/tmp/shell]# cat case.sh
  
 while [ 0 ]
 do
  
 /usr/ucb/echo -n "input jumsu : "
  
 read jumsu
  
 case $jumsu in 
   100|90)
      echo "Excllent!"
      echo "A";;
   80)
      echo "B";;
   70)
      echo "C";;
   quit)
      exit;;
   *)
      echo "F";;
 esac
  
 echo ""
  
 done
  
 server [/tmp/shell]# 
 -------------------------------


5. while 구문
## 단순 while 문
while [ 조건 ]
do
 실행문장
done

 ------------------------------
 ex) 1부터 10까지 출력 후 SUM값 출력
 ------------------------------
 sum=0
 i=1
  
 while [ $i -le 10 ]
 do
         print -n "$i  "
         ((sum=sum+i))
         ((i=i+1))
 done
  
 print "   [SUM:$sum] "
 ------------------------------


## 다중 while 문
while [ 조건 ]
do
 while [ 조건 ]
        do
            실행문장
        done
done

 --------------------------------
 ex)
 --------------------------------
 echo -n "input password : "
 read password1
 echo -n "retype password : "
 read password2
 
 while [ "$passowrd" != "$password2" ]
 do
  echo "password miss match ty again"
  read password2
 done
 echo "OK ! password Match complete"
 --------------------------------


6. until 구문
until [ 조건 ]
do
 실행문장
done

 -------------------------------
 ex)
 -------------------------------
 until who | grep "$1" > /der/null
 do
  sleep 5
 done
 echo "user $1 just logged in"
 -------------------------------


6 for 문

for 변수 in list
do
 실행문장
done

for 변수 in list
do
 for 변수 in list
 do
  실행문장
 done
done

 -------------------------------
 ex)
 -------------------------------
 for string in "hello" "unix" "world"
 do
  echo -n "$string "
 done
 -------------------------------


7. select 문.
select 변수 in list
do
 실행문장
done

8. 함수
함수명 () {
 실행문장
 [ return value ]
}
또는
function 함수명 {
 실행문장
 [ return value ]
}

break / continue
break 제어문이나 조건문의 루프를 빠져나갈 때 사용한다.
continue : 제어문이나 조건문의 처음으로 돌아가서 다시 수행한다.

:  의미 없는 명령. 논리 값 true를 대신해서 쓰기도 한다.

. 명령 - 스크립트를 실행. 스크립트 내에서 다른 파일을 include하는 경우에도 사용

exec - 현재 shell을 다른 shell 로 대체
exit n : 현재 shell 종료 시 리턴 값 n 반환

shift : shell의 인자를 오른쪽으로 하나 shift 한다.

 -------------------------------
 ex)
 -------------------------------
 echo $1
 shift
 echo $1
 shift 3
 echo $1
 
 ./script 1 2 3 4 5 6 7
 1
 2
 5
 -------------------------------


출처: http://iclickyou.com/135

'Language > Unix' 카테고리의 다른 글

[펌] Cron Format  (0) 2012.05.09
[펌] Unix 8 쉘프로그래밍  (0) 2010.09.28
[펌] How to Use VI  (0) 2010.09.27
Linux, unix, ^M, 리눅스, 없애기, 유닉스  (0) 2009.06.18