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

Linux의 터미널에서 Bash Shell 스크립트를 실행 시킬 때, 스크립트 안에서 Command Line으로 전달된 인자를 어떻게 받는지 알아보겠습니다.

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

예를 들어, 터미널에서 다음과 같이 인자 없이 스크립트만 실행할 수 있습니다.

$ sh script.sh

하지만, 아래와 같이 스크립트를 실행하면서 다양한 인자들을 전달할 수도 있습니다.

$ sh script.sh 111 222 333

위와 같이 터미널에서 스크립트를 실행할 때 인자가 전달되면, 파일에서는 아래와 같이 인자들을 받을 수 있습니다.

  • 인자가 전달되면 스크립트 내부에서는 $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

Loading script...

Related Posts

codechachaCopyright ©2019 codechacha