쉘스크립트 실행 시 argument 전달하기
on ShellScript
터미널에서 간단하게 처리해야할 일들이 있을 때 쉘스크립트, 혹은 파이썬 스크립트 등을 자주 사용한다.
파이썬에서는 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 로 출력해서 볼 때는 $*
을 사용하는 것과 다를 것 없어 보이지만, 사실은 각 단어들을 구분해서 리스트처럼 가지고 있다는 것이 큰 차이이다.
즉, 반복문에서 $@
를 돌린다면 각 인자들이 따로따로 들어오지만, $*
을 돌릴 경우에는 전체 인자들이 하나의 문자열로 묶이기 때문에 해당 문자열 한번만 탐색하는 것이다.