[Shell Script ] 명령어 사용법을 표시할 때 현재 파일명 표시
명령어 사용법을 표시할 때 현재 파일명 표시
도움말 표시나 로그 출력 시 파일명을 출력하고 싶을 때 사용합니다 .
#!/bin/sh
prog=$(basename"$0") ##1
#인수가 하나가 아니면 도움말을 표시하고 종료합니다 .
if [ $# -ne 1]; then ##2
echo "Usage: $prog <string>" 1>&2 ##3
exit 1
fi
#명령행 인수 $1 표시
echo "Start: $prog... "
echo "Input Argument : $1"
echo "Stop: $prog..." ##4
결과
해설
이 스크립트는 다음 조건으로 명령행 인수를 표시합니다 .
- 명령행 인수가 하나뿐이면 그 값을 표시합니다 .
- 명령행 인수가 없거나 두 개 이상이면 사용법을 표시한다 .
#1에서 자신의 파일명을 스크립트 안에서 취득해 그 값을 셸 변수 prog에 저장한 뒤 , 도움말 표시 등에 사용하는 것이 이 예제의 포인트 입니다 .
"셸 스크립트는 이식성이 뛰어난 프로그램이므로 복사해서 전역적으로 사용하는 경우가 많습니다 .
그럴 때 파일명을 내부에 작성하여 사용하면 실제 파일명과 달라 혼란이 생깁니다 . "
따라서 스크립트는 #1에서 파일명을 참조하여 얻습니다 .
여기서 사용하는 basename 명령어는 다음처럼 파일경로를 나타내는 문자열에서 경로 부분을 제거 한 후 파일명만 추출합니다 .
#1 에서는 변수 $0에 대한 basename 명령어 출력을 명령어 치환 $()으로 셸 변수 prog에 대입합니다 .
(변수 $0은 셸 스크립트에서 사용하는 특수한 변수로 셸 스크립트가 실행될 때의 명령어 이름이 됩니다.)
스크립트는 전체 경로로 실행 될수도 , 상대 경로로 실행될 수 있지만 앞서 본 것처럼 제대로 파일명을 취득 할 수 있습니다 .
#2에서 명령행 인수를 확인합니다 .
변수 $#에는 인수 수가 들어 있으므로 이 값이 1이 아니라면 에러 처리 합니다.
이때 에러메세지로 #3처럼 표시합니다 .
이것은 에러 메세지 이므로 1>&2로 표준 에러 출력을 사용합니다 .
#4는 지정한 인수 값을 출력합니다.
$1은 명령행 인수 첫 번째 값을 나타냅니다.
여기에서는 스크립트 동작 로그로 변수 prog 값을 함께 출력하여 나중에 로그 파일을 보았을 때 어떤 스크립트가 출력한 로그인지 알기 쉽도록 합니다.