명령줄 인수 기본 사항 이해
getopt 에 대해 자세히 알아보기 전에, Bash 스크립트가 일반적으로 명령줄 인수를 처리하는 방법을 이해해 보겠습니다. Bash 에서 스크립트에 인수를 전달하면, 해당 인수는 다음과 같은 특수 변수를 통해 접근할 수 있습니다.
$0: 스크립트 자체의 이름
$1, $2, $3 등: 첫 번째, 두 번째, 세 번째 등 위치 인수
$#: 스크립트에 전달된 인수의 수
$@: 스크립트에 전달된 모든 인수
이러한 명령줄 인수의 기본적인 처리를 보여주는 간단한 스크립트를 만들어 보겠습니다.
첫 번째 스크립트 만들기
-
LabEx 환경에서 터미널을 엽니다.
-
프로젝트 디렉토리로 이동합니다.
cd ~/project
-
편집기를 사용하여 basic_args.sh라는 새 파일을 만듭니다.
touch basic_args.sh
-
편집기에서 파일을 열고 다음 내용을 추가합니다.
#!/bin/bash
echo "Script name: $0"
echo "First argument: $1"
echo "Second argument: $2"
echo "Third argument: $3"
echo "Total number of arguments: $#"
echo "All arguments: $@"
-
스크립트를 실행 가능하게 만듭니다.
chmod +x basic_args.sh
-
몇 가지 인수를 사용하여 스크립트를 실행합니다.
./basic_args.sh apple banana cherry
다음과 유사한 출력을 볼 수 있습니다.
Script name: ./basic_args.sh
First argument: apple
Second argument: banana
Third argument: cherry
Total number of arguments: 3
All arguments: apple banana cherry
기본 인수 처리의 제한 사항
이러한 기본적인 접근 방식은 간단한 스크립트에는 유용하지만, 몇 가지 제한 사항이 있습니다.
- 옵션 (-f 또는 --file 과 같은) 과 일반 인수 간의 구분이 없음
- 자체 인수를 갖는 옵션을 처리할 방법이 없음
- 사용자 입력을 검증하는 표준 방법이 없음
- 짧은 형식과 긴 형식 옵션을 모두 구현하기 어려움
예를 들어, 다음과 같이 호출할 수 있는 스크립트를 원한다고 가정해 보겠습니다.
./myscript.sh -f file.txt -o output.txt --verbose
옵션인지 여부를 결정하고 관련 매개변수를 처리하려면 각 인수를 수동으로 구문 분석해야 합니다. 이는 빠르게 복잡해지고 오류가 발생하기 쉽습니다.
이때 getopt 명령이 유용합니다. 이는 Bash 스크립트에서 명령줄 옵션과 인수를 처리하는 표준화된 방법을 제공합니다.