치춘짱베리굿나이스

쉘 스크립트 문법 본문

UNIX 환경/Shell

쉘 스크립트 문법

치춘 2021. 3. 21. 03:18

Shell Script 작성 문법

일반 변수

일반 변수 선언

  • 변수명 = 데이터

    test1 = 'hello world!'

  • 중요!!! 변수명, =, 데이터 사이에 띄어쓰기 붙이지 않으면 에러 남
  • String은 " (큰따옴표) 로 감싸주기

일반 변수 사용

  • $변수명

    echo $test1

    hello world

리스트 변수

리스트 변수 선언

  • 변수명=(데이터1 데이터2 데이터3 ...)

    chicken = ('fried' 'yangnyeom' 'ganjang')

  • 변수명=($(명령어명)) 은 해당 명령어 사용 결과를 배열로 저장

    test1 = ($(ls))

리스트 변수 사용

  • ${변수명[인덱스]}

    echo ${chicken[1]}

    yangnyeom

  • ${변수명[@]}, ${변수명[*]} 은 배열 내 모든 데이터 출력

    echo ${chicken[@]}

    fried yangnyeom ganjang

  • ${#변수명[@]} 은 배열 크기 출력

    echo ${#chicken[@]}

    3

사전 선언된 지역변수

  • $$: 쉘 프로세스 번호

    echo $$

    2336

  • $0: 쉘 스크립트의 이름

    echo $0

    ./test.sh

  • $1 ~ $9 : 명령줄 인수

  • $* : 모든 명령줄 인수 리스트

연산자

  • expr : 숫자 계산
    • 문장을 `로 감싸줘야 함
      • '이랑 다름!
    • 연산자 *와 괄호 () 앞에는 \를 붙여줘야 함
    • 연산자, 숫자, 변수, 기호 사이에는 공백 ( ) 넣기

      n1=`expr \( 5 + 6 \) \* 8`
      echo $n1

      88

if else 구문

  • if [ 조건 ]; then 내용 이 짝꿍
  • else if은 elif [ 조건 ]; then 내용 으로 사용
  • else 는 then 필요 없음
  • if문을 닫을 때는 fi
    • 조건문은 [ 조건문 ] 으로 사용
    • 꺾인괄호 옆에 공백이 들어가는 것을 기억하자
  • 예시

    if [ 조건 ]
    then
    실행시킬 명령문 1
    elif [ 조건 ]
    then
    실행시킬 명령문 2
    else
    실행시킬 명령문 3
    fi

  • 또는

    if [ 조건 ]; then
    실행시킬 명령문 1
    elif [ 조건 ]; then
    실행시킬 명령문 2
    else
    실행시킬 명령문 3
    fi

조건문

문자열

  • == : 양 옆의 문자열이 일치

    test1 == test2

    test1과 test2가 같을 때 참

  • != : 양 옆의 문자열이 일치하지 않음

    test1 != test2

    test1과 test2가 다를 때 참

  • -z 변수명 : 문자열이 null이면 참

    -z test1

    test1이 null (빈값) 이면 참

  • -n 변수명 : 문자열이 null이 아니면 참

    -n test1

    test1이 null이 아닐 때 참

수치

  • -eq : 양 옆의 수가 같음 (equal)

    test1 -eq test2

    test1 = test2일때 참

  • -ne : 양 옆의 수가 같지 않음 (not equal)

    test1 -ne test2

    test1 != test2일때 참

  • -lt : 왼쪽이 오른쪽보다 작음 (less than)

    test1 -lt test2

    test1 < test2일 때 참

  • -le : 왼쪽이 오른쪽보다 작거나 같음 (less or equal)

    test1 -le test2

    test1 <= test2일 때 참

  • -gt : 왼쪽이 오른쪽보다 큼 (greater than)

    test1 -gt test2

    test1 > test2일 때 참

  • -ge : 왼쪽이 오른쪽보다 크거나 같음 (greater or equal)

    test1 -ge test2

    test1 >= test2일 때 참

논리 연산자

  • -a, && : and

    조건1 -a 조건2
    조건1 && 조건2

    조건1과 조건2가 둘다 참일 때 참
    -a는 조건을 그대로 쓸 때, &&는 [ ] 안에 넣어줬을 때 사용

  • -o, || : or

    조건1 -o 조건2
    조건1 || 조건2

    조건1과 조건2 둘 중 하나라도 참일 때 참
    -o는 조건을 그대로 쓸 때, ||는 [ ] 안에 넣어줬을 때 사용

  • ! : not

    !조건1

    조건1이 성립하지 않을 때 참

  • true : 항상 참
  • false : 항상 거짓

파일 검사

  • -e : 파일이 존재

    -e test.sh

    test.sh가 존재하면 참

  • -d : 디렉토리일 때

    -d folder1

    folder1이 디렉토리일 때 참

  • -f : 파일이 일반 파일

    -f test.sh

    파일이 일반 파일이면 (파이프라인, 심볼릭, 폴더 등 제외) 참

  • -r : 파일이 읽기 가능

    -r test.sh

    파일이 읽기 가능할 때 (r 권한 있을 때) 참

  • -w : 파일이 쓰기 가능

    -w test.sh

    파일이 쓰기 가능할 때 (w 권한 있을 때) 참

  • -x : 파일이 실행 가능

    -x test.sh

    파일이 실행 가능할 때 (x 권한 있을 때) 참

  • -s : 파일의 크기가 0이 아님

    -s test.sh

    파일 크기가 0이 아닐 때 (빈 파일이 아닐 때) 참

  • -h : 파일이 심볼릭 파일

  • -u : 파일이 set-user-id 설정됨

for while 구문

for

  • for i in 리스트; do 내용 이 짝꿍

  • for문을 닫을 때는 done

  • 예시

    for i in list1
    do
    실행시킬 명령문
    done

  • 또는

    for i in list1; do 실행시킬 명령문; done

  • 리스트에 숫자 배열 (range) 을 쓰고 싶다면

  • 예시: 1부터 10까지

    • 일렬로 적기

      for i in 1 2 3 4 5 6 7 8 9 10

    • 시퀀스로 적기 (python의 range와 비슷)

      for i in `seq 1 10`

    • C언어 구문처럼 적기

      for ((i=1; i<=10; i++))

while

  • while [ 조건 ]; do 내용 이 짝꿍
  • while문을 닫을 때는 done
  • 예시

    while [ 조건문 ]
    do
    실행시킬 명령문
    done

  • 또는

    while [ 조건 ]; do 실행시킬 명령문; done

  • 예시: 1부터 10까지

    i=1
    while [ $i -le 10 ]
    do
    실행시킬 명령문
    i=`expr $i + 1`

    -le (less then) 과 $i 변수, 수식을 활용함

주석

  • #로 시작하는 라인

    #이것은 주석입니다..

'UNIX 환경 > Shell' 카테고리의 다른 글

crontab 사용하기  (0) 2022.07.20
쉘 & 쉘스크립트 정리  (0) 2021.03.21
Comments