Skip to content

shell programming

조회 수 20476 추천 수 0 2010.03.08 03:01:07

shell programming


shell programming - (1) 기본 문법



* 인용 부호

" "       // 특수 문자 및 변수를 사용
' '        // 입력된 모든 문자를 일반 문자로 사용함(변수명일지라도 무시)
\         // 바로 뒤의 특수문자를 문자로 변환
``         // 해당 문자열을 명령어로 먼저 처리함



* 배열

변수명=(값1 값2 값3)

ex)
# test=(1 2 3 4)

# echo ${test[0]}
1

# echo ${test[3]}
4

# echo ${test[*]}
1 2 3 4


* 산술 비교 연산자

A -eq B            // A 는 B와 값이 같다.
A -ne B           // A 와 B의 값이 다르다.
A -gt B            // A 는 B보다 크다.(greater than)
A -lt B             // A 는 B보다 작다.(less than)
A -ge B           // A 는 B보다 크거나 같다.
A -le B            // A 는 B보다 작거나 같다.

(ex) num=4
       if [ $num -ne 5 ];then
           echo "5가 아니잖아!!"
       fi



*문자열 비교 연산자

-z stringA              // 문자열의 길이가 0인 경우
-n stringA               // 문자열의 길이가 0이 아닌경우
stringA = stringB      // 문자열이 동일
stringA != stringB     // 문자열이 다름
string                     // 문자열값이 있는경우(변수가 null 값인지 확인용도)




* 파일 검사 연산자

-f      // 파일이 존재하며 정규파일인 경우
-a      // 파일이 존재할 경우
-b      // 파일이 존재하며 block device 일 경우
-c      // 파일이 존재하며 character device 일 경우
-d      // 파일이 존재하며 directory 인 경우
-u      // 파일이 존재하며 SetUID가 설정된 경우
-g      // 파일이 존재하며 SetGID가 설정된 경우
-k      // 파일이 존재하며 Sticky 비트가 설정된 경우
-r      // 파일이 존재하며 읽기 가능할 경우
-s      // 파일이 존재하며 크기가 0보다 클 경우
-h      // 파일이 존재하며 한개 이상의 심볼릭링크가 설정되어 있을 경우
-w      // 파일이 존재하며 쓰기가 가능한 경우
-x      // 파일이 존재하며 실행가능한 경우

(ex) if [ -w /etc/passwd ];then
           echo "passwd에 쓰기 가능하네요~"
     fi




* 여러 조건 동시에 사용

if [ 조건식1 -a 조건식2 ]   // 둘다 만족
if [ 조건식1 -o 조건식2 ]   // 하나라도 만족
if [ \( 조건식1 -a 조건식2 \) -o \( 조건식3 -a 조건식4 \) ]     // 1+2 혹은 3+4를 만족

(ex) if [ -f /etc/passwd -a -r /etc/passwd -a -w /etc/passwd ];then
          echo "passwd file edit enable"
     fi

 
* 조건문 - if

if [ 조건식 ];then
    실행문
elif [ 조건식 ];then     // 생략가능
    실행문
else                         // 생략가능
    실행문
fi                              // 종료를 알리는 것이므로 꼭 써주어야함



* 조건문 - case

case 변수 in
        패턴1) 실행문
        ;;
        패턴2) 실행문
        ;;
        *) 실행문          // 위 패턴을 제외한 나머지 경우
        ;;
      



* 반복문

1. for

for 변수명 in 리스트          // 리스트는 공백으로 구분,  for 변수명 in $(ls) 등으로 리스트를 받는것도 가능함
do
        $변수명,명령들
done


2. while

while [ 조건식 ]
do
        명령들
done


** 스크립트내부에서 산술연산시 (( )) 사용함
(ex) while 예제 
      num=0
      while [ $num -lt 5 ]
          do
                echo "num : $num"
             num=$((num+1))
        done


(ex2) for 예제
        for((num=0;num<=9;num++))
        do
                echo "num : $num"
        done




* 문자열 연산자

${변수명:-변수값}       // 변수가 존재하면 해당 값 반환, 값이 없거나 NULL 이면 변수값으로 새로 할당함
${변수명:위치 값}                // 위치값부터 마지막까지 출력
${변수명:위치값:문자열길이}     //  지정한 위치부터 지정길이만큼 출력

ex)

# TEST="http://cafe.naver.com/secuholic"

# echo ${TEST:7}
cafe.naver.com/secuholic

# echo ${TEST:22:9}
secuholic




* 함수

function()
{
        실행문
}



* 함수 실행

function



** 함수에 매개변수 전달 // 함수는 독자적인 인자를 가진다.

function a b c    // 내부에서 $1 은 a, $2는 b, $3은 c 가 된다.
function $*       // 셸상에서 입력받았던 인자를 함수의 인자로 전달함



** 셸에서 사용되는 특별 변수

$$        // 현재 실행중인 프로세스의 PID
$?        // 마지막에 실행한 명령어의 종료값(에러,정상 종료 등)
$!         // 마지막 자식 프로세스의 PID
$#        // 인자의 총 갯수
$0        // 명령어를 저장. 위치 매개변수라고 함
$1,$2,...  // 인자들을 저장함. 함수의 경우 함수별로 독립적임
$*        // 명령에 전달된 인수 전체를 한개의 문자열로 처리
$@        // 명령에 전달된 인수를 목록으로 각각의 문자열로 처리

profile

I see no changes, wake up in the morning and I ask myself

Is life worth living should I blast myself

Things would never be the same.

태그
엮인글 :
http://adminplay.com/7954/e29/trackback
List of Articles
번호 제목 글쓴이 날짜 조회 수
187 악성코드 일괄 삭제 ADMINPLAY 2010-04-17 27456
186 젠투리눅스 설치기록 ADMINPLAY 2010-04-17 22906
185 젠투리눅스에서 잃어버린 암호를 다시 설정하기 ADMINPLAY 2010-04-15 23943
184 대용량 HDD 파티셔닝(Mass storage Partitioning) (GPT 파... ADMINPLAY 2010-04-14 76821
183 VI 에디터 유니코드(UTF-8)로 인코딩 전환 ADMINPLAY 2010-04-02 24012
182 배치파일을 이용한 백업방법 l2zeo 2010-03-31 59636
181 가상화 (XEN & KVM) 리눅스 - CentOS 5.4 에서 XEN 설치 file ADMINPLAY 2010-03-24 32495
180 Linux 서버에서 yum 으로 X-Window 설치하기 ADMINPLAY 2010-03-24 20348
179 X-window 설치 ADMINPLAY 2010-03-24 23414
178 일반적인 웹로봇의 방문 및 배제와 관련한 robots.txt 저... ADMINPLAY 2010-03-16 20705
177 Vista Bootloader에 Fedora 10 부팅옵션 추가해서 듀얼 부... l2zeo 2010-03-08 23275
176 [UNIX] 솔라리스 보안 [ 발표자료 ] - 김 석 님 자료 file l2zeo 2010-03-08 26501
175 CentOS 5.3에서 samba구축방법 file l2zeo 2010-03-08 29516
» shell programming l2zeo 2010-03-08 20476
173 시스칼리지- 꿔니님의 클러스트링 강좌 l2zeo 2010-03-08 32822
172 리눅스 한글 설정 l2zeo 2010-03-08 26477
171 Cent OS-5.2 설치 문서 file l2zeo 2010-02-24 31850
170 CentOS 설치 - VMware 상에서 CentOS 설치하기 file l2zeo 2010-02-24 52167
169 ORA-01031: insufficient privileges 오류 ADMINPLAY 2010-02-24 41088
168 ruby on rails 설치 (Ubuntu Server DIY ) l2zeo 2010-02-20 30482

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234