쉘스크립트 실행 시 argument 전달하기

터미널에서 간단하게 처리해야할 일들이 있을 때 쉘스크립트, 혹은 파이썬 스크립트 등을 자주 사용한다.

파이썬에서는 sys.argv에 터미널 명령어에서 넘겨준 인자의 개수나 값 등을 확인할 수 있는데, 쉘스크립트도 마찬가지로 가능하다.


개수 확인하기

$#을 통해 터미널로부터 넘겨받은 인자의 개수를 가져올 수 있다. 예를 들어 bash test.sh arg1 arg2 arg3처럼 실행시킬 경우, $#는 3 이 되는 것이다.

if [ $# -gt 2 ] ; then
    echo arguments are more than 2
fi


값 확인하기

파이썬에서 실행시킨 파일명이 sys.argv[0]에 자동으로 들어오듯이, 쉘스크립트에서도 $0에 쉘스크립트 파일명이 들어온다.

넘겨준 인자들은 그 뒤로 $1, $2, $3… 에 들어온다.

# test.sh
echo There are $# arguments
echo Shellscrip Filename is $0
if [ $# -ge 2 ] ; then
    if [ $1 = "Hi" ] ; then
        echo Say Hi to $2
    fi
fi
# Command
bash test.sh Hi bconfiden2

# Output
There are 2 arguments
Shellscrip Filename is test.sh
Say Hi to bconfiden2


그 외에도 $*를 사용하면 전체 인자들을 하나의 문자열로 취급할 수 있다.

# test.sh
echo When using '*' : $*
echo When using @ : $@
# Command
bash test.sh arg1 arg2 arg3

# Output
When using * : arg1 arg2 arg3
When using @ : arg1 arg2 arg3

$@의 경우 단순히 echo 로 출력해서 볼 때는 $* 을 사용하는 것과 다를 것 없어 보이지만, 사실은 각 단어들을 구분해서 리스트처럼 가지고 있다는 것이 큰 차이이다.

즉, 반복문에서 $@를 돌린다면 각 인자들이 따로따로 들어오지만, $*을 돌릴 경우에는 전체 인자들이 하나의 문자열로 묶이기 때문에 해당 문자열 한번만 탐색하는 것이다.