Bash Shell Script - Command Line으로 전달된 인자 받기

By JS | Last updated: September 28, 2021

Linux의 터미널에서 Bash Shell script를 실행 시킬 때, Command Line으로 전달된 인자를 받는 방법을 소개합니다.

터미널에서 아래와 같이 인자 없이 스크립트만 실행할 수 있지만,

$ sh script.sh

스크립트를 실행하면서 다양한 인자들을 전달할 수 있습니다.

$ sh script.sh 111 222 333

스크립트로 전달된 인자들을 읽는 방법에 대해서 알아보겠습니다.

1. Command Line으로 전달된 인자 받기

인자가 전달되면 스크립트 내부에서는 $1, $2처럼, $n 형태로 인자를 읽을 수 있습니다. n은 인자가 입력되는 순서를 의미합니다. 그리고 $#는 전달된 인자의 개수입니다.

#!/bin/bash
echo "1st param = $1"
echo "2nd param = $2"
echo "3rd param = $3"

echo "The number of params = $#"

Output:

$ bash example.sh 111 222 333
1st param = 111
2nd param = 222
3rd param = 333
The number of params = 3

인자 없이 실행시키면 인자 개수는 0, 인자들은 null(empty)입니다.

$ bash example.sh
1st param =
2nd param =
3rd param =
The number of params = 0

2. 인자를 변수에 할당

다음과 같이 인자들을 다른 변수에 할당할 수 있습니다. 또한 인자들끼리 연산하여 다른 변수에 할당할 수도 있습니다.

#!/bin/bash

num1=$1
num2=$2
num3=$3
sum=$(($num1+$num2+$num3))

echo "num1 = $num1"
echo "num2 = $num2"
echo "num3 = $num3"
echo "sum = $sum"

Output:

$ bash example.sh 111 222 333
num1 = 111
num2 = 222
num3 = 333
sum = 666

3. For Loop를 이용하여 인자 읽기

스크립트가 실행될 때마다 전달되는 인자의 개수가 정해져있지 않다면, for loop로 유동적인 개수의 인자들을 모두 읽을 수 있습니다.

$@는 전달되는 모든 인자가 포함된 문자열이며, 각각의 인자는 공백으로 구분되어있습니다.

다음과 같이 for loop를 이용하여 전달되는 모든 인자를 읽을 수 있습니다.

#!/bin/bash

echo "All params = $@"

echo "Loop all params!"
for i in $@
do
    echo "$i"
done

Output:

$ bash example.sh 111 222  333
All params = 111 222 333
Loop all params!
111
222
333

4. 인자가 전달되었는지 확인 (1)

조건문을 이용하여 인자가 전달되었는지 확인할 수 있습니다.

[ -z $A ]는 A 문자열의 길이가 0일 때 True를 리턴합니다.

다음과 같이 인자가 전달되었는지 확인할 수 있습니다.

#!/bin/bash

if [ -z $1 ]
then
    echo "No parameter passed"
else
    echo "Parameter passed = $1"
fi

Output:

$ sh ex_arg4.sh 111
Parameter passed = 111

$ sh ex_arg4.sh
No parameter passed

4. 인자가 전달되었는지 확인 (2)

[ -n "$A" ]는 A 문자열의 길이가 0일 때 False를 리턴합니다. -z와 반대되는 값을 리턴합니다.

다음과 같이 인자가 전달되었는지 확인할 수 있습니다.

if [ -n "$1" ]
then
    echo "Parameter passed = $1"
else
    echo "No parameter passed"
fi

Output:

$ bash example.sh 111
Parameter passed = 111

$ bash example.sh
No parameter passed

References

댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha