쉘스크립트

Linux/Linux (CentOS) 2018. 7. 4. 23:40

쉘 프로그래밍 : 쉘에서 제공되는 프로그래밍 환경을 통한 프로그래밍

쉘 스크립트 : 쉘 프로그래밍을 통해서 생성한 파일 (스크립트 파일)



리눅스 실행 파일의 두 가지 형식

1. 바이너리 파일 : 컴파일해서 나온 실행파일 ex) ls , mv , ps

2. 쉘 스크립트 파일 : 텍스트 형태의 파일이지만 실행명령어들을 모아놓은 배치파일

    ex) /etc/init.d/network  ,  /etc/init.d/sshd



쉘 스크립트가 필요한 이유

 - 서버 관리하기 위해 반드시 필수이며 많은 프로그램들이 쉘 스크립트 파일로 작성되어 있다.



쉘 스크립트 생성하기

 - 파일 생성 후 실행권한으로 변경한다

 - 꼭 실행권한이 있어야 되는건 아니지만 일반적으로 실행권한이 있어야 한다

 - 파일의 확장자가 꼭 sh 로 끝나지 않아도 되지만 sh 로 끝나면 쉘 스크립트 파일임을 알 수 있다





변수

 - 데이터를 저장하는 그릇


형식 : 변수병=값   <--- 변수와 값은 반드시 붙여서 써야한다

 > 변수를 출력하는 방법 : echo $변수명

ex) # a=1

      # echo $a

          1



종료 코드 : 자식 프로세스가 끝나면 부모프로세스에게 전달해주는 값

성공 : 프로그램이 정상 종료  리턴값 0

실패 : 프로그램이 비정상 종료 리턴값 0 이외의 값




쉘 스크립트 안에는 실행 명령어가 들어간다



if 문에서 사용하는 정수 비교 연산자


일반 프로그래밍 언어  :  쉘 스크립트

i > j             :    [ $i -gt $j ]

i < j             :    [ $i -lt $j ]

i >= j           :    [ $i -ge $j ]

i <= j           :    [ $i -le $j ]

i == j          :     [ $i -eq $j ]

i != j           :     [ $i -ne $j ]


if 문에서 사용하는 문자열 비교 연산자


일반 프로그래밍 언어    :    쉘 스크립트

i == j        :        [ $i = $j ]    : 같다

i != j          :        [ $i != $j ]  :  같지 않다

[ -z $i ]     : 변수의 값이 없을 경우 , 문자열의 길이 0

[ -n $i ]     : 변수의 값이 있을 경우 , 문자열의 길이 1 이상




if 문에서 사용하는 파일 테스트

[ -f 일반파일]

[ -d 디렉토리]

[ -e 존재하는 파일]

[ -r 읽기권한]

[ -w 쓰기권한]

[ -x 실행권한]






case 문


형식 : 

case 변수명 in

값1) 실행문1

:

:

값2) 실행문 2

:       

:

*) 실행문 3

:

:

esac


명령행 인자 :

$*  ,  $@

$# : 6

+------------------------+

l                                  l

# ./ case1.sh aaa bbb ccc ddd eee fff

     l           l     l      l     l       l    l

  $0        $1    $2   $3  $4  $5  $6 ...... $9 ${10}


쉘에서 제공되는 특수 변수들

$0 : 명령어

$1 : 첫번째 인자

$2 : 두번째 인자

:

:

$# : 전체 인자의 개수

$*  : 전체 인자의 문자열

$@ : 전체 인자의 문자열



case 문의 대표적인 프로그램


/etc/init.d/sshd  : ssh 원격 접속 데몬을 실행시켜주는 스크립트

/usr/sbin/sshd    : ssh 원격 접속 데몬


#/etc/init.d/sshe

사용법 : /etc/init.d/sshd {start|stop|restart|reload|force-reload|condrestart|try-restart|status}

ex) # /etc/init.d/sshd stop

sshd 를 정지 중 :                    [ OK ]

ex) # /etc/init.d/ssht start

sshd 를 시작 중 :                    [ OK ]






while 반복문

- 명령문을 반복적으로  사용하고자 할 경우에 사용한다

형식 : 

while [ 조건문]

do

실행문

:

:

:

done


ex)

# i=1

# while [ $i -ne 5 ]

> do

>        printf "."    <------  . 을 화면에 출력한다. (엔터(개행)키가 없다)

>        sleep 1       <------  1초 중지한다

>        i=$((i+1))    <------- i 변수의 값을 1 증가한다  i=$((i+1)) == i++

>done

....




for 반복문

- 명령문을 반복적으로 사용하고자 할 경우에 사용한다

형식 :

for 변수 in 리스트

do

실행문

:

:

done



ex)

# for i in 1 2 3 4 5

do

echo "i = $i 입니다"

done

i = 1입니다

i = 2입니다

i = 3입니다

i = 4입니다

i = 5입니다






until 반복문

- 명령문을 반복적으로 사용하고자 할 경우에 사용한다

while 문 하고 다르게 조건문에 거짓을 경우에 do ~ done 사이를 실행한다

형식 :

while [조건문]

do

실행문

:

:

done


ex)

# i=1

# until [ $i -eq 5 ]

> do

>         echo -n "." 

>         sleep 1

>         i=$((i+1))

> done

....






continue 문

- for , while 반복문에서 사용한다

- continue 문은 반복문에서 만나면 조건문으로 올라간다


ex)

# i=0

# while :

> do

>        i=$((i+1))

>        if [ $i -eq 3 ];

>        then

>            continue

>        fi

>        if [ $i -eq 10 ];

>        then

>            break

>        fi

>        echo "i = $i"

> done


i = 1

i = 2

i = 3

i = 4

i = 5

i = 6

i = 7

i = 8

i = 9





break 문

- for , while 반복문에서 사용한다

- break문은 반복문에서 만나면 반복문을 종료한다


break 문이 없는 경우


ex)

# i=1

# while :

> do

>        printf "."

>        sleep 1

>        i=$((i+1))

> done

........................(무한루프)


break 문이 있는경우


ex)

# i=1

# while :

> do

>        printf "."

>        sleep 1

>        i=$((i+1))

>        if [ $i -eq 10 ];

>        then

>                break

>        fi

> done

..........(루프종료)









함수

- 여러가지 일을 하나로 처리할 수 있도록 묶어놓은 코드의 집합


함수정의 : 

function 함수명()

{

명령어

:

:

}


함수명()

{

명령어

:

:

}



명령행 인자 :

$*  ,  $@

$# : 6

+------------------------+

l                                  l

# ./ case1.sh aaa bbb ccc ddd eee fff

     l           l     l      l     l       l    l

  $0        $1    $2   $3  $4  $5  $6 ...... $9 ${10}


쉘에서 제공되는 특수 변수들

$0 : 명령어

$1 : 첫번째 인자

$2 : 두번째 인자

:

:

$# : 전체 인자의 개수

$*  : 전체 인자의 문자열

$@ : 전체 인자의 문자열








'Linux > Linux (CentOS)' 카테고리의 다른 글

심볼릭 링크 하드링크  (0) 2018.07.05
리눅스 기본 설명  (0) 2018.07.05
패키지 관리  (0) 2018.07.04
프로세스  (0) 2018.07.04
사용자 그룹  (0) 2018.07.03

설정

트랙백

댓글