Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

Bash 프로그램에 도움말 기능을 추가하는 방법

이 시리즈의 첫 번째 기사에서는 매우 작은 한 줄짜리 Bash 스크립트를 만들고 셸 스크립트를 만드는 이유와 컴파일된 프로그램보다 시스템 관리자에게 가장 효율적인 옵션인 이유를 살펴보았습니다. 두 번째 기사에서는 다른 Bash 프로그램의 시작점으로 사용할 수 있는 매우 간단한 템플릿을 만드는 작업을 시작한 다음 테스트 방법을 탐색했습니다.

이 시리즈의 네 가지 기사 중 이 세 번째 기사에서는 간단한 도움말 기능을 만들고 사용하는 방법을 설명합니다. 도움말 기능을 만드는 동안 기능 사용 및 -h와 같은 명령줄 옵션을 처리하는 방법도 배우게 됩니다. .

도움이 필요한 이유

아주 간단한 Bash 프로그램이라 할지라도 그것이 아주 기초적이라 할지라도 일종의 도움말 기능이 있어야 합니다. 내가 작성하는 많은 Bash 셸 프로그램은 너무 드물게 사용되어 필요한 명령의 정확한 구문을 잊어버립니다. 다른 것들은 너무 복잡해서 자주 사용하더라도 옵션과 인수를 검토해야 합니다.

내장된 도움말 기능을 사용하면 코드 자체를 검사하지 않고도 이러한 항목을 볼 수 있습니다. 훌륭하고 완벽한 도움말 기능도 프로그램 문서의 일부입니다.

기능 정보

셸 함수는 셸 환경에 저장되고 다른 명령과 마찬가지로 명령줄에 이름을 입력하여 실행할 수 있는 Bash 프로그램 명령문의 목록입니다. 쉘 함수는 사용 중인 다른 프로그래밍 언어에 따라 프로시저 또는 서브루틴이라고도 합니다.

함수는 다른 명령과 마찬가지로 이름을 사용하여 스크립트 또는 명령줄 인터페이스(CLI)에서 호출됩니다. CLI 프로그램이나 스크립트에서 함수의 명령은 호출될 때 실행되고 프로그램 흐름 시퀀스는 호출 엔터티로 돌아가고 해당 엔터티의 다음 일련의 프로그램 명령문이 실행됩니다.

함수 구문은 다음과 같습니다.

FunctionName(){program statements}

CLI에서 간단한 함수를 만들어 이를 살펴보십시오. (함수는 생성된 셸 인스턴스의 셸 환경에 저장됩니다.) hw라는 함수를 생성합니다. , "hello world"를 의미합니다. CLI에 다음 코드를 입력하고 Enter 키를 누릅니다. . 그런 다음 hw를 입력합니다. 다른 쉘 명령과 마찬가지로:

[student@testvm1 ~]$ hw(){ echo "Hi there kiddo"; }
[student@testvm1 ~]$ hw
Hi there kiddo
[student@testvm1 ~]$

자, 그래서 저는 표준 "Hello world" 스타터에 약간 지쳤습니다. 이제 현재 정의된 모든 함수를 나열합니다. 너무 많아서 새로운 hw만 보여드리겠습니다. 기능. 명령줄이나 프로그램 내에서 호출될 때 함수는 프로그래밍된 작업을 수행한 다음 종료하고 호출 엔터티, 명령줄 또는 호출 문 다음의 스크립트에서 다음 Bash 프로그램 명령문으로 제어를 반환합니다.

[student@testvm1 ~]$ declare -f | less
<snip>
hw ()
{
    echo "Hi there kiddo"
}
<snip>

더 이상 필요하지 않으므로 해당 기능을 제거하십시오. 설정하지 않음으로 할 수 있습니다. 명령:

[student@testvm1 ~]$ unset -f hw ; hw
bash: hw: command not found
[student@testvm1 ~]$

도움말 기능 만들기

안녕하세요를 엽니다. 편집기에서 프로그램을 만들고 hello 프로그램 코드는 저작권 문구 뒤에 있지만 "Hello world!"를 표시하기 전에 성명. 이 도움말 기능은 프로그램에 대한 간단한 설명, 구문 다이어그램 및 사용 가능한 옵션에 대한 간단한 설명을 표시합니다. 도움말 기능에 대한 호출을 추가하여 테스트하고 기능과 프로그램의 주요 부분 사이에 시각적 구분을 제공하는 주석 줄을 추가합니다.

################################################################################
# Help                                                                         #
################################################################################
Help()
{
   # Display Help
   echo "Add description of the script functions here."
   echo
   echo "Syntax: scriptTemplate [-g|h|v|V]"
   echo "options:"
   echo "g     Print the GPL license notification."
   echo "h     Print this Help."
   echo "v     Verbose mode."
   echo "V     Print software version and exit."
   echo
}

################################################################################
################################################################################
# Main program                                                                 #
################################################################################
################################################################################

Help
echo "Hello world!"

이 도움말 기능에 설명된 옵션은 아직 코드에 없지만 내가 작성하는 프로그램에 일반적입니다. 프로그램을 실행하여 테스트하십시오.

[student@testvm1 ~]$ ./hello
Add description of the script functions here.

Syntax: scriptTemplate [-g|h|v|V]
options:
g     Print the GPL license notification.
h     Print this Help.
v     Verbose mode.
V     Print software version and exit.

Hello world!
[student@testvm1 ~]$

필요할 때만 도움말을 표시하는 논리를 추가하지 않았기 때문에 프로그램은 항상 도움말을 표시합니다. 기능이 올바르게 작동하고 있으므로 -h일 때만 도움말을 표시하는 논리를 추가하세요. 옵션은 명령줄에서 프로그램을 호출할 때 사용됩니다.

취급 옵션

-h와 같은 명령줄 옵션을 처리하는 Bash 스크립트 기능 프로그램을 지시하고 수행하는 작업을 수정하는 몇 가지 강력한 기능을 제공합니다. -h의 경우 옵션을 선택하면 프로그램이 터미널 세션에 도움말 텍스트를 인쇄한 다음 나머지 프로그램을 실행하지 않고 종료하도록 합니다. 명령줄에 입력된 옵션을 처리하는 기능은 while을 사용하여 Bash 스크립트에 추가할 수 있습니다. 명령(Bash로 프로그래밍하는 방법:루프 참조 동안에 대해 자세히 알아보기 ) getops와 함께 및 대소문자 명령.

도착 명령은 명령줄에 지정된 모든 옵션을 읽고 해당 옵션 목록을 만듭니다. 아래 코드에서 while 명령은 $options 변수를 설정하여 옵션 목록을 반복합니다. 각각. 케이스 명령문은 각 옵션을 차례로 평가하고 해당 스탠자의 명령문을 실행하는 데 사용됩니다. 동안 명령문은 모두 처리되거나 프로그램을 종료하는 exit 명령문을 만날 때까지 옵션 목록을 계속 평가합니다.

"Hello world!"가 울리기 직전에 도움말 함수 호출을 삭제해야 합니다. 이제 프로그램의 본문이 다음과 같이 보이도록 문:

################################################################################
################################################################################
# Main program                                                                 #
################################################################################
################################################################################
################################################################################
# Process the input options. Add options as needed.                            #
################################################################################
# Get the options
while getopts ":h" option; do
   case $option in
      h) # display Help
         Help
         exit;;
   esac
done

echo "Hello world!"

-h 대소문자 옵션에서 exit 문의 끝에 이중 세미콜론을 확인하세요. . 이는 각 옵션의 끝을 설명하기 위해 이 사례 설명에 추가된 각 옵션에 필요합니다.

테스트

이제 테스트가 조금 더 복잡해졌습니다. 프로그램이 어떻게 반응하는지 확인하려면 다양한 옵션을 사용하여 프로그램을 테스트해야 합니다. 먼저 "Hello world!"가 인쇄되는지 확인하는 옵션 없이 테스트합니다. 그래야 합니다:

[student@testvm1 ~]$ ./hello
Hello world!

작동하므로 이제 도움말 텍스트를 표시하는 논리를 테스트하십시오.

[student@testvm1 ~]$ ./hello -h
Add description of the script functions here.

Syntax: scriptTemplate [-g|h|t|v|V]
options:
g     Print the GPL license notification.
h     Print this Help.
v     Verbose mode.
V     Print software version and exit.

예상대로 작동하므로 몇 가지 테스트를 통해 예상치 못한 옵션을 입력할 때 어떤 일이 발생하는지 확인하세요.

[student@testvm1 ~]$ ./hello -x
Hello world!
[student@testvm1 ~]$ ./hello -q
Hello world!
[student@testvm1 ~]$ ./hello -lkjsahdf
Add description of the script functions here.

Syntax: scriptTemplate [-g|h|t|v|V]
options:
g     Print the GPL license notification.
h     Print this Help.
v     Verbose mode.
V     Print software version and exit.

[student@testvm1 ~]$

프로그램은 오류를 생성하지 않고 특정 응답 없이 모든 옵션을 무시합니다. 그러나 마지막 항목( -lkjsahdf 사용 옵션):h가 있기 때문에 옵션 목록에서 프로그램이 이를 인식하고 도움말 텍스트를 인쇄합니다. 이 테스트는 프로그램이 잘못된 입력을 처리하고 감지되는 경우 프로그램을 종료하는 기능이 없음을 보여주었습니다.

명시적으로 일치하지 않는 옵션과 일치하도록 case 문에 다른 case 스탠자를 추가할 수 있습니다. 이 일반적인 경우는 특정 일치 항목을 제공하지 않은 모든 항목과 일치합니다. 이제 case 문은 \?의 포괄 일치 항목과 함께 다음과 같이 표시됩니다. 마지막 경우로. 추가적인 특정 사례는 이 마지막 사례보다 먼저 와야 합니다.

while getopts ":h" option; do
   case $option in
      h) # display Help
         Help
         exit;;
     \?) # incorrect option
         echo "Error: Invalid option"
         exit;;
   esac
done

이전과 동일한 옵션을 사용하여 프로그램을 다시 테스트하고 지금 어떻게 작동하는지 확인하십시오.

현재 위치

명령줄 옵션과 도움말 절차를 처리하는 기능을 추가하여 이 문서에서 많은 것을 달성했습니다. 이제 Bash 스크립트는 다음과 같습니다.

#!/usr/bin/bash
################################################################################
#                              scriptTemplate                                  #
#                                                                              #
# Use this template as the beginning of a new program. Place a short           #
# description of the script here.                                              #
#                                                                              #
# Change History                                                               #
# 11/11/2019  David Both    Original code. This is a template for creating     #
#                           new Bash shell scripts.                            #
#                           Add new history entries as needed.                 #
#                                                                              #
#                                                                              #
################################################################################
################################################################################
################################################################################
#                                                                              #
#  Copyright (C) 2007, 2019 David Both                                         #
#  LinuxGeek46@both.org                                                        #
#                                                                              #
#  This program is free software; you can redistribute it and/or modify        #
#  it under the terms of the GNU General Public License as published by        #
#  the Free Software Foundation; either version 2 of the License, or           #
#  (at your option) any later version.                                         #
#                                                                              #
#  This program is distributed in the hope that it will be useful,             #
#  but WITHOUT ANY WARRANTY; without even the implied warranty of              #
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
#  GNU General Public License for more details.                                #
#                                                                              #
#  You should have received a copy of the GNU General Public License           #
#  along with this program; if not, write to the Free Software                 #
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   #
#                                                                              #
################################################################################
################################################################################
################################################################################

################################################################################
# Help                                                                         #
################################################################################
Help()
{
   # Display Help
   echo "Add description of the script functions here."
   echo
   echo "Syntax: scriptTemplate [-g|h|t|v|V]"
   echo "options:"
   echo "g     Print the GPL license notification."
   echo "h     Print this Help."
   echo "v     Verbose mode."
   echo "V     Print software version and exit."
   echo
}

################################################################################
################################################################################
# Main program                                                                 #
################################################################################
################################################################################
################################################################################
# Process the input options. Add options as needed.                            #
################################################################################
# Get the options
while getopts ":h" option; do
   case $option in
      h) # display Help
         Help
         exit;;
     \?) # incorrect option
         echo "Error: Invalid option"
         exit;;
   esac
done

echo "Hello world!"

이 버전의 프로그램을 철저히 테스트하십시오. 임의 입력을 사용하고 어떤 일이 발생하는지 확인하십시오. 또한 대시(- ) 앞.

다음 시간

이 문서에서는 선택적으로 표시하기 위해 명령줄 옵션을 처리하는 기능과 함께 도움말 기능을 추가했습니다. 프로그램이 점점 더 복잡해지고 있으므로 테스트가 더욱 중요해지고 있으며 완료하려면 더 많은 테스트 경로가 필요합니다.

다음 기사에서는 변수를 초기화하고 프로그램이 올바른 조건 집합에서 실행되는지 확인하기 위해 약간의 온전한 검사를 수행하는 방법을 살펴볼 것입니다.

자원

  • Bash로 프로그래밍하는 방법:구문 및 도구
  • Bash로 프로그래밍하는 방법:논리 연산자 및 셸 확장
  • Bash로 프로그래밍하는 방법:루프

이 기사 시리즈는 David Both의 Linux 자체 학습 과정인 3부로 구성된 Linux 사용 및 관리 - Zero to SysAdmin의 2권 10장을 부분적으로 기반으로 합니다.