13장. 구문 분석 및 유사 작업
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
이 장은 프로그래머라면 알아볼 수 있는 작업들로 구성되어 있습니다. 여기서의 레시피가 이 책의 다른 bash 스크립트 레시피보다 반드시 고급은 아니지만, 프로그래머가 아니라면 이러한 작업이 모호하거나 bash 사용과 무관하게 보일 수 있습니다. 이러한 상황에 처하게 되는 이유에 대해서는 자세히 설명하지 않겠습니다(프로그래머라면 전부는 아니더라도 일부는 알 수 있을 것입니다). 하지만 이러한 상황을 인지하지 못하더라도 bash에 대해 배울 수 있는 내용을 읽어보시기 바랍니다.
이 장의 일부 레시피에는 명령줄 인수의 구문 분석이 포함되어 있습니다. 셸 스크립트에서 옵션을 지정하는 일반적인 방법은 앞의 마이너스 기호와 한 글자를 사용하는 것입니다. 예를 들어, 스크립트에서 더 적은 수의 메시지를 제공하는 옵션은 -q 을 조용한 모드를 의미하는 플래그로 사용할 수 있습니다. 때로는 옵션에 인수가 필요할 수도 있습니다. 예를 들어 사용자 아이디를 지정해야 하는 사용자 옵션의 경우 -u 뒤에 사용자 아이디를 사용할 수 있습니다. 이 구분은 이 장의 첫 번째 레시피에서 명확하게 설명합니다.
일부 Linux 명령은 긴 형식의 옵션도 허용합니다. 앞의 짧은 형식의 -u 옵션 예제를 사용하면 명령이 다음과 같은 긴 형식도 지원할 수 있습니다. --user=username. 여기서는 긴 형식의 옵션은 표시하지 않지만 일부 기법에는 사용할 수 있습니다. 긴 인수를 구문 분석하는 가장 좋은 방법은 getopt (참고: s 없음) 명령을 사용하는 것입니다.
13.1 셸 스크립트의 인수 구문 분석하기
문제
셸 스크립트에 사용자가 동작을 변경하는 데 사용할 수 있는 몇 가지 옵션과 플래그를 추가하고 싶을 수 있습니다. ${} 을 사용하여 제공된 인수의 수를 알려주고 ${1:0:1} 을 사용하여 첫 번째 인수의 첫 번째 문자가 마이너스 기호인지 테스트하여 직접 구문 분석을 수행할 수 있습니다. 하지만 어떤 옵션인지, 인수가 필요한지 확인하려면 if/then 또는 case 로직이 필요합니다. 사용자가 필수 인수를 제공하지 않거나 두 가지 옵션이 결합된 스크립트(예: -ab)를 호출하면 어떻게 하나요? 그것도 파싱할까요? 셸 스크립트에서 옵션을 구문 분석해야 하는 경우는 흔한 상황입니다. 많은 스크립트에 옵션이 있습니다. 이 작업을 수행하는 더 표준적인 방법이 있지 않나요?
솔루션
bash의기본 제공 getopts 명령을 사용하여 도움말 옵션을 구문 분석합니다.
예제 13-1은 주로 getopts에 대한 매뉴얼 페이지의 예제를 기반으로 합니다.
예제 13-1. ch13/getopts_example
#!/usr/bin/env bash# cookbook filename: getopts_example## using getopts#aflag=bflag=whilegetopts'ab:'