Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

실전 예제 2가지로 이해하는 Bash 위치 매개변수($0, $1, $2)

매개변수(parameter)는 값을 저장하는 개체로, 이름, 숫자 또는 특수 문자일 수 있습니다. 변수(variable)는 이름으로 표시되는 매개변수를 의미합니다. 일부 변수는 시스템에 의해 미리 설정되어 있으며, 대부분의 경우 사용자가 임의로 값을 할당할 수 없습니다.

이러한 변수들은 셸 스크립트가 실행 중인 환경에 대한 유용한 정보를 담고 있어, 스크립트 내부에서 다양하게 활용할 수 있습니다.

Bash는 크게 두 가지 종류의 매개변수를 제공합니다.

  • 위치 매개변수(Positional Parameter)
  • 특수 매개변수(Special Parameter)

이 글에서는 예제를 통해 Bash 위치 매개변수에 대해 자세히 살펴보겠습니다. 본 아티클은 지속적으로 연재 중인 Bash 튜토리얼 시리즈의 일부입니다.

예제 1: Bash 위치 매개변수 – $0, $1, $2 …

위치 매개변수는 스크립트가 실행(호출)될 때 전달되는 인자(argument)를 의미합니다. $1부터 $N까지 사용할 수 있으며, N이 두 자리 이상일 경우 반드시 ${N}처럼 중괄호({})로 묶어야 합니다.

$0 변수는 프로그램이 호출될 당시 사용된 베이스네임(basename)을 나타냅니다.

다음 예제는 두 개의 인자를 받아 해당 정수들에 대한 산술 연산 결과를 출력합니다.

먼저 아래와 같이 arithmetic.sh 셸 스크립트를 생성합니다.

$ cat arithmetic.sh
#!/bin/bash

echo -e  "\$1=$1"
echo -e "\$2=$2"

let add=$1+$2
let sub=$1-$2
let mul=$1*$2
let div=$1/$2

echo -e "Addition=$add\nSubtraction=$sub\nMultiplication=$mul\nDivision=$div\n"

그다음, 적절한 매개변수와 함께 arithmetic.sh를 실행합니다.

$ ./arithmetic.sh 12 10
$1=12
$2=10
Addition=22
Subtraction=2
Multiplication=120
Division=1

위 출력 결과에서 $1에는 값 12가, $2에는 값 10이 저장된 것을 확인할 수 있습니다.

셸 내장 명령어인 'let'은 셸 변수에 대해 산술 연산을 수행할 수 있도록 해줍니다. 위 스크립트는 전달받은 매개변수를 대상으로 덧셈, 뺄셈, 곱셈, 나눗셈 연산을 차례로 수행하여 결과를 보여줍니다.

예제 2: Bash 위치 매개변수 설정(Set) 및 해제(Unset)

내장 명령어 set을 사용하면 위치 매개변수를 설정(set)하거나 해제(unset)할 수 있습니다.

먼저 아래와 같이 positional.sh 셸 스크립트를 생성합니다.

$ cat positional.sh
#!/bin/bash

# From command line
echo -e "Basename=$0"
echo -e  "\$1=$1"
echo -e "\$2=$2"
echo -e "\$3=$3"

# From Set builtin
set First Second Third
echo -e  "\$1=$1"
echo -e "\$2=$2"
echo -e "\$3=$3"

# Store positional parameters with -(hyphen)
set - -f -s -t
echo -e  "\$1=$1"
echo -e "\$2=$2"
echo -e "\$3=$3"

# Unset positional parameter
set --
echo -e  "\$1=$1"
echo -e "\$2=$2"
echo -e "\$3=$3"

위 스크립트는 먼저 커맨드 라인에서 전달된 인자를 출력한 뒤, set 명령어로 위치 매개변수를 명시적으로 설정하는 방법을 보여줍니다. set 뒤에 하이픈(-) 하나를 붙이면 옵션 목록의 끝을 의미하며, 이후에 오는 모든 인자는 '-f', '-s'처럼 하이픈으로 시작하더라도 위치 매개변수로 처리됩니다. 또한 set 뒤에 '--'만 입력하고 다른 인자를 지정하지 않으면 기존의 모든 위치 매개변수가 해제됩니다.

다음과 같이 positional.sh를 실행해 결과를 확인해 보겠습니다.

$ ./positional.sh
Basename=t.sh
$1=12
$2=10
$3=
$1=First
$2=Second
$3=Third
$1=-f
$2=-s
$3=-t
$1=
$2=
$3=

출력 결과를 통해 set 명령어가 위치 매개변수를 어떻게 덮어쓰고, '--' 옵션으로 어떻게 초기화되는지 단계별로 확인할 수 있습니다.

다음 글에서는 예제와 함께 Bash 특수 매개변수(Special Parameters)에 대해 자세히 알아보겠습니다.