장점

  • 기존 명령어를 조합하여 새로운 명령어를 만들 수 있다.
  • 파이프라인과 리다이렉션 같은 셸의 기능과 셸 스크립트를 조합하여 다양한 문제를 해결할 수 있다.
  • 리눅스의 다양한 필터를 조합하여 문제를 해결하는 것 가능하다.
  • 반복되는 수작업을 줄일 수 있다.

 

단점

  • 대규모 시스템에 적합하지 않다.
    • 변수타입이 없다.
    • 객체 지향 프로그래밍 불가능
    • IDE 지원도 부족
  • 고성능이 필요한 처리
    • 기본적으로 한 행씩 명령어를 실행 ( 자식 프로세스를 생성하는 처리가 동반) → 속도가 느리다.

●  구조

# 방식 1
function <함수 이름> ()
{
     처리
}

# 방식 2
function <함수 이름>
{
     처리
}

# 방식 3
<함수 이름> ()
{
     처리
}

 

 

● 예시

func-example.sh

# !/bin/bash

homesize ()
{
    date
    du  -h  | tail -n 1
}

homesize

 

func-example2.sh

# !/bin/bash

print_parameters ()
{
    echo "\$1 = $1"
    echo "\$2 = $2"
    echo "\$3 = $3"
    echo "\$4 = $4"
    echo 
    echo "$# arguements"
    echo "script name  $0"
}

print_parameters   aaa bb ccc   # 함수 호출 + 인자 입력

● 셸 함수 종료상태 지정

   함수안에서 가장 마지막에 실행한 명령어의 종료상태가 셸 함수의 종료 상태

 

return < 종료상태>

#!/bin/bash

checkparam()
{
   if [ -z "$1"  ]; then
       return 1
   fi
   ls "$1"

 

구조

while  <명령어(주로 조건식)>
do
   반복처리
done

 

홀수 출력하기 예시

while-example.sh

#!/bin/bash

i = 1
while [ "$i" -le 10 ]      # 10 이하까지 반복
do
    echo "$i"
    i = $((i+2))               # 산술연산자
done

 

 

산술연산자

$ i=10
$ echo $(( i + 1 ))
11
$ echo $(( i / 2))
5
$ echo $(( i * 2 ))
20
$ echo $(( i ** 2))
100

지정한 문자열의 패턴에 따라 분기할 수 있는 제어 구조

●  구조

case-example.sh

#!/bin/bash

case "$1"  in                # case <문자열> in
    start | stop )             #          <패턴 1>)
          echo "OK"          #             처리 1
          ;;                          #              ;;
    * )                        
          echo "NG"
          ;;
esac

 패턴은 항상 ')' 로 끝나야 함

 패턴의 개수 제한은 없다.

 마지막 패턴  * 는 아무것도 해당하지 않을 경우를 지정하기 위해서 사용

for 문

지정된 명령어를 실행하여 종료상태가 0 이면 참으로 판단하고 그 외에는 거짓으로 판단

●  구조

for-example.sh

#!/bin/bash

for name in aaa bbb ccc     # for 변수 in 리스트
do
     echo $ name                   # 반복처리   
done

 

  ▶  리스트에  가능한 것들

       - 경로확장 : *.html

       - 명령어 치환 : ex)  $(seq 1 5)   1 부터 5까지 반환

       - 커맨드라인의 모든 인자 :  "$@"
                  ex)  for-example.sh  readme.txt "hello" 100

 

+ Recent posts