Skip to content

shell programming

조회 수 20473 추천 수 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/eb6/trackback
List of Articles
번호 제목 글쓴이 날짜 조회 수sort

도메인 Status 상태별 설명 안내

HDD Guardian (a graphical user interface for smartctl)

dpkg 사용법

top 화면 내용중 load average와 PRI : priority(우선순위...

ubuntu 10.04 에서 Nginx, Mysql, PHP5

HP 서버 disk 증설 (hpacucli 사용)

리눅스 메모리 관리, 왜 메모리 여유공간이 없을까? (top ...

windows smartctl

ZFS 파일에 ACL 설정

make 정리

SSL 패스워드 삭제 하기

EXT4 파일 시스템을 Btrfs 파일 시스템으로 변환하기

tar 압축을 실수로 디렉토리 생성 안하고 풀었을때 대처법

ll 명령시 날짜 전체가 보이도록 하기

hddtemp와 mrtg를 이용한 하드디스크 온도 체크 file

python과 mysql 연동시 libmysqlclient_r.so.* 에러가 날 ...

linux 커널 파라메터 수정

우분투(Ubuntu) ssh 설정하기

error: Hm, kex protocol error: type 30 seq 1 [preauth]... file

운영중인 Linux 서버에서 NTFS 파일 시스템 삭제하기

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234