[Shell Script] 기초 문법 - 변수

Jade·2021년 3월 10일
0

쉘 스크립트 만들기

  • 실습 환경: CentOS7 (기본 쉘이 bash가 아닐 경우 변경하는 방법)
  • 스크립트 파일을 만들 때는 일반적으로 .sh 확장자를 사용한다.
  • 시작 부분에 #!/bin/bash를 붙여 해당 파일이 쉘 스크립트라는 것을 알려준다.
  • 계속해서 실행하고자 하는 명령어들을 입력하고 저장 후 빠져나온다.

sh 명령어를 사용하여 실행하기

  • sh 명령어와 생성한 쉘 스크립트 파일명을 입력해 실행한다.

chmod 명령어 사용하여 실행하기

  • 생성한 쉘 스크립트 파일에 실행 권한을 주고, 직접 쉘 스크립트를 실행하는 방법

    +x: 모든 사용자(소유자, 그룹, 기타 사용자)에게 실행 권한 부여

다른 방법으로 실행하기

  • 일단 다른 스크립트 언어와는 다르게 명령어와 함께 프롬프트에서도 다음과 같이 바로 실행할 수 있다.
  • 하지만 쉘 스크립트를 파일로 만들어 사용하는 이유는 계속해서 재사용 할 수 있고 다른 쉘 스크립트를 만들 때 참조할 수 있기 때문임을 기억해야 한다.

변수 사용하기

  • 쉘 스크립트를 개발할 때, 특정 명령어를 실행한 결과값을 이용하여 또 다른 명령어를 실행해야 할 경우가 종종 발생한다. 이런 경우 변수를 활용하면 좋다.

변수 선언

  • 쉘 스크립트의 경우 특별한, 변수 타입이 필요하지 않다.
  • 기본적인 변수 선언 방법은 사용하고자 하는 명령어 전에 변수를 선언하고, 해당 변수에 필요한 값을 저장하면 된다.

예제1) 기본 변수 선언 - 문자열 출력하기

  • 변수를 선언하고, 값을 저장한다.
  • 앞에서 선언한 변수를 다음과 같이 echo 문자열 옆에 입력한다.

예제2) 기본 변수 선언 - 디렉터리 생성하기

  • 변수를 선언하고, 생성할 디렉터리명을 차례대로 문자열에 저장한다.
  • 디렉터리를 생성하는 mkdir 명령어 입력 후 앞서 선언한 변수명을 $와 함께 입력한다.

변수의 종류

함수

  • 함수는 특정 동작이나 목적을 위해 만들어졌다.
  • 함수는 스크립트 재사용을 위해 사용한다.
  • 함수 작성은 function이라는 단어로 시작하며, 어떤 동작을 위한 함수인지를 나타내는 함수명 뒤에 소괄호()를 붙여준다.
  • 그 다음 중괄호{}를 붙여 함수의 시작과 끝을 알린다.
  • 함수를 사용할 때는 함수에 필요한 파라미터와 함께 해당 함수를 호출한다.

전역 변수

  • 스크립트 전체에서 변수에 저장한 값을 사용할 수 있는 변수
  • 위 예제처럼 함수가 선언 되기 전, 함수 밖에서 선언된 변수($language)의 값이 함수 내에서도 유효한 것을 알 수 있다.

지역 변수

  • 함수 내에서만 변수에 저장된 값이 유효한 변수
  • 위 예제에서 myshell.sh를 실행하였을 때 알 수 있는 결과는 다음과 같다.
    1. learn 함수의 출력 결과가 알맞게 보여진다.
    2. print $language의 결과로 전역 변수의 값인 Korean이 정상 출력되었다.
    3. print $learn_language의 결과가 출력되지 않는 이유는 해당 local 함수 밖에서 실행되었기 때문이다.

예약변수 및 환경변수

  • HOME: 사용자의 홈 디렉터리
  • PATH: 명령어나 쉘 실행 시 실행 파일 디렉터리 경로
  • 이 밖에도 FUNCNAME, LANG, PWD, TERM, SHELL, USER, USERNAME 등 시스템을 위해 사전에 미리 사용하고 있는 예약변수들이 존재한다.

위치 매개변수

  • 위치 매개변수란 스크립트 수행 시 함께 넘어오는 파라미터다.
  • `$0, $1, $*, $@, $#
  • 위 예제에서 mylanguage.sh를 실행하였을 때 알 수 있는 결과는 다음과 같다.
    1. $0은 실행한 쉘 스크립트의 파일명이 출력되었다.
    2. $1, $2는 쉘 스크립트와 함께 넘긴 파라미터 Korean과 English가 순서대로 출력되었다.
    3. $*와 $@의 출력 결과 값이 같다.
    4. $#은 파라미터의 개수가 출력되었다.

$*과 $@의 차이

  • 전체 인자 값이 출력된다는 점은 같지만, 큰따옴표"" 사용 여부에 따라 결과값이 달라진다.

특수 매개변수

  • 현재 실행중인 스크립트나 명령어의 프로세스 ID를 확인하거나 바로 앞에서 실행한 명령어나 함수 또는 스크립트 실행이 정상적으로 수행되었는지 여부를 확인할 수 있는 변수
  • $$, $?, $!, %-

매개변수 확장

기본 변수 사용법

  • $ 뒤에 선언한 변수명을 입력함으로써 변수를 사용할 수 있지만, 문자열과 문자열 사이에 외부로부터 입력받은 값을 치환하기 위해 변수를 사용할 경우 $와 함께 중괄호{}를 같이 사용하면 시스템이 쉽게 변수명을 인식할 수 있다.

변수를 초기화(할당, 치환)하기 위한 확장 변경자

  • %{변수-문자열}, ${변수:-문자열}, ${변수=문자열}, ${변수:=문자열}, ${변수+문자열}, ${변수:+문자열}, ${변수?에러메시지}, ${변수:?에러메시지}, ${변수:시작위치}, ${변수:시작위치:길이}

변수의 문자열 값을 변경하기 위한 매개변수 확장자

  • ${변수#패턴}, ${변수##패턴}, ${변수%패턴}, ${변수%%패턴}, ${#변수}, ${변수/찾을문자열/바꿀문자열}, ${변수/#찾을문자열/바꿀문자열}, ${변수/%찾을문자열/바꿀문자열}

📌 장현정 지음, 『처음 배우는 셸 스크립트』, 한빛미디어(2021)

profile
우당탕탕 좌충우돌 인프라 여행기

0개의 댓글