ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Ubuntu] shell script 작성법
    CI-CD/Ubuntu 2022. 6. 15. 14:17
    반응형

    쉘 스크립트란?

    unix계열에서 특정 명령어를 파일 형식으로 작성하여 한번에 돌릴 수 있도록 코딩 하는 것, python script, java script 같은 것이라고 보면된다.

    기본 작성 내용

    • 확장자는 .sh 로 작성
    • #!는 she bang 이라는 것으로 먼저 #!/bin/sh로 shell 스크립트라는 것을 인식시켜 준다 #!/usr/python3 형식으로 적는다면 python 스크립트로 인식하게 된다.
    • 명령어는 sh, bash 로 작성하여 실행 시킨다.
    chmod 755 test.sh
    sh test.sh 
    bash test.sh
    

    주석

    #로 코멘트 처리 함

    #!/bin/sh
    
    # <- # 글자로 시작하면 코멘트나 주석을 달 수 있다.
    

    입/출력

    echo는 출력, read는 읽기

    #!/bin/sh
    
    # NAME은 환경 변수에 등록 되어있는 것을 읽어 온다.
    read NAME
    ehco "Hello, $NAME!"
    
    # 개행 문자 
    echo -e "Hello, $NAME"
    

    변수

    #!/bin/sh
    
    # 변수는 타입없이 그냥 바로 작성한다.
    var="변수1"
    # 대문자와 언더바 사용가능 
    Var_2="변수2"
    # 다른 곳에서 '$'를 붙여 소환 가능
    echo "var_2=$Var_2"
    

    내장 변수

    변수 설명

    $0 스크립트명
    $1~$9 인수로 들어온 것을 순서대로 반환(ex : ssh test@192.168.1.25 test copy) $1 = test@192.168.1.25, $2 = test , $3 = copy
    $# 스크립트로 전달된 인수의 수
    $* 모든 인수 하나로 처리
    $@ 모든 인수를 각각 처리
    $? 직전에 실행한 커멘드의 종료값 0 = 성공 , 1 = 실패
    $$ 해당 쉘 스크립트의 프로세스 ID
    $! 마지막으로 실행한 백그라운드 프로세스 ID

    배열(bash)

    #!/bin/bash
    
    array=(item1, item2, item3, item4)
    array[0]="ITEM1"
    array[2]="ITEM3"
    
    # 하나의 값만 출력
    echo "array[0] : ${array[0]}"
    echo "array[1] : ${array[1]}"
    # ARRAY[0]: ITEM1
    # ARRAY[1]: item2
    
    # 모든 값 출력
    echo "array[*] : ${array[*]}"
    echo "array[@] : ${array[@]}"
    
    # ARRAY[*]: ITEM1 item2 ITEM3 item4
    # ARRAY[@]: ITEM1 item2 ITEM3 item4
    

    오퍼레이터(연산자)

    산수 연산자는 expr 숫자 연산자 숫자 를 이용하여 계산한다.

    연산자 의미 예

    + 덧셈 expr 10 + 20
    = 뺄셈 expr 20 - 10
    \* 제곱 expr 11\*11
    / 나눗셈 expr 10/2
    % 나머지 expr 10 % 4
    = 자정 a=$b b의 값을 a로 저장
    == 동일 [”$a” == “$b”] $a과 $b가 동일하지 않는 경우 TRUE가 반환된다.
    != 다름 [”$a” != “$b”] $a과 $b가 동일하지 않는 경우 TRUE가 반환된다.

    비교연산자는 “[ ]”를 기준으로 비교를 한다.

    비교 의미

    -eq 동일
    -na 다음
    -gt 보다 큼
    -lt 보다 작음
    -ge 보다 크거나 같거나
    -le 보다 작거나 같거나
    ! 같지 않다
    -o 어느쪽이든
    -a 양쪽
    -z 문자열이 비었는가
    -n 문자열이 비었는가

    if 조건문

    조건문은 if [ 조건 ] then 커맨드 fi 다른 것을 실행 할려면 elif [ 조건 ]에 적힌 내용을 확인

    #!/bin/sh
    
    if [ "$1" -gt "$2"]
    then
    	echo "1번째 인수가 2번째 인수보다 크다"
    elif [ "$1" -eq "$2"]
    then 
    	echo "1번째 인수가 2번째 인수가 동일하다"
    else
    	echo "1번째 인수가 2번쟤 인수보다 작다."
    fi
    

    switch 조건

    case 변수 in 조건 - 값) 커맨드 ;; esac 로 구성한다.

    #!/bin/sh
    
    DRINK="coffe"
    case $DRINK in 
    	"beer") echo "맥주"
    	;;
    	"juice") echo "주스"
    	;;
    	"coffe") echo "프로그래머가 마시면 커피로 변화!"
    	;;
    esac
    

    루프 반복문

    while문

    break로 종료 continu로 계속 돌림 가능

    #!/bin/sh
    
    a=0
    while [ $a -lt 5]
    do
    	echo $a
    	a = `expr $a + 1`
    done
    

    until 문

    while과 반대로, 조건과 일치할 때까지 반복된다.

    #!/bin/sh
    a=0
    until [ ! $a -lt 5 ]
    do 
    	echo $a
    	a = `expr $a + 1`
    done
    

    for문

    for var in 0 1 2 3 4
    do 
    	 echo $var
    done
    

    함수(function)

    #!/bin/sh
    
    # 기본 함수
    MyFunction() {
    	echo "함수의 echo이다."
    }
    
    # 인자를 사용한 함수
    MyFunction() {
    	func_a=$1
    	func_b=$2
    	echo "$func_a $func_b"
    }
    
    반응형

    댓글

Designed by Tistory.