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

셸 스크립트에서 구문 검사 디버깅 모드를 수행하는 방법

다양한 디버깅 옵션과 쉘 스크립트 디버깅 모드를 활성화하는 방법을 설명하면서 쉘 스크립트 디버깅 시리즈를 시작했습니다.

셸 스크립트를 작성한 후에는 스크립트가 올바르게 작동하는지 확인하기 위해 출력을 보는 것이 아니라 실행하기 전에 스크립트의 구문을 실제로 확인하는 것이 좋습니다.

시리즈의 이 부분에서는 구문 검사 디버깅 모드를 사용하는 방법을 살펴보겠습니다. 이 시리즈의 첫 번째 부분에서 다양한 디버깅 옵션에 대해 설명했으며 여기에서는 스크립트 디버깅을 수행하는 데 사용할 것임을 기억하십시오.

자세한 디버깅 모드 활성화

이 가이드의 주요 내용으로 이동하기 전에 상세 모드를 간략하게 살펴보겠습니다. . -v에 의해 활성화됩니다. 스크립트를 읽는 동안 스크립트의 모든 행을 표시하도록 쉘에 지시하는 디버깅 옵션입니다.

이것이 어떻게 작동하는지 보여주기 위해 PNG 이미지를 JPG 형식으로 일괄 변환하는 샘플 셸 스크립트가 아래에 있습니다.

파일에 입력(또는 복사하여 붙여넣기)하십시오.

#!/bin/bash
#convert
for image in *.png; do
        convert  "$image"  "${image%.png}.jpg"
        echo "image $image converted to ${image%.png}.jpg"
done
exit 0

그런 다음 파일을 저장하고 아래 명령을 사용하여 스크립트를 실행 가능하게 만드십시오.

$ chmod +x script.sh

다음과 같이 스크립트를 호출하고 쉘에서 읽을 때 모든 행을 표시할 수 있습니다.

$ bash -v script.sh
셸 스크립트에서 구문 검사 디버깅 모드를 수행하는 방법

쉘 스크립트에서 구문 검사 디버깅 모드 활성화

강조하는 주제인 -n으로 돌아갑니다. 구문 검사 모드를 활성화합니다. 기본적으로 모든 명령을 읽도록 셸에 지시하지만 실행하지 않고 사용된 구문만 검사합니다.

쉘 스크립트에 오류가 있는 경우 쉘은 터미널에 오류를 출력하고, 그렇지 않으면 아무 것도 표시하지 않습니다.

구문 검사를 활성화하는 구문은 다음과 같습니다.

$ bash -n script.sh

스크립트의 구문이 정확하기 때문에 위의 명령은 출력을 표시하지 않습니다. 따라서 done을 제거해 보겠습니다. for 루프를 닫고 오류가 표시되는지 확인하는 단어:

다음은 png 이미지를 버그가 포함된 jpg 형식으로 일괄 변환하는 수정된 셸 스크립트입니다.

#!/bin/bash
#script with a bug
#convert
for image in *.png; do
        convert  "$image"  "${image%.png}.jpg"
        echo "image $image converted to ${image%.png}.jpg"

exit 0

파일을 저장한 다음 구문 검사를 수행하는 동안 실행하십시오.

$ bash -n script.sh
셸 스크립트에서 구문 검사 디버깅 모드를 수행하는 방법

위의 출력에서 ​​스크립트에 구문 문제가 있음을 알 수 있습니다. for 루프에 닫는 done이 누락되었습니다. 키워드 단어. 그리고 쉘은 파일의 끝까지 그것을 찾았고 그것을 찾지 못하면 (완료 ), 쉘이 구문 오류를 출력했습니다:

script.sh: line 11: syntax error: unexpected end of file

상세 모드와 구문 검사 모드를 함께 결합할 수도 있습니다.

$ bash -vn script.sh
셸 스크립트에서 구문 검사 디버깅 모드를 수행하는 방법

또는 다음 예에서와 같이 위의 스크립트의 첫 번째 줄을 수정하여 구문 검사를 활성화할 수 있습니다.

#!/bin/bash -n
#altering the first line of a script to enable syntax checking

#convert
for image in *.png; do
    convert  "$image"  "${image%.png}.jpg"
    echo "image $image converted to ${image%.png}.jpg"

exit 0

이전과 마찬가지로 파일을 저장하고 구문 검사를 수행하면서 실행합니다.

$ ./script.sh

script.sh: line 12: syntax error: unexpected end of file

또한 위의 스크립트에서 디버깅 모드를 활성화하기 위해 set shell 내장 명령을 사용할 수 있습니다.

아래 예에서는 스크립트에서 for 루프의 구문만 확인하고 있습니다.

#!/bin/bash
#using set shell built-in command to enable debugging
#convert

#enable debugging
set -n
for image in *.png; do
    convert  "$image"  "${image%.png}.jpg"
    echo "image $image converted to ${image%.png}.jpg"

#disable debugging
set +n
exit 0
으로 변환됨

다시 한 번 파일을 저장하고 스크립트를 호출합니다.

$ ./script.sh 

요약하면, 우리는 쉘 스크립트를 실행하기 전에 오류를 포착하기 위해 구문적으로 항상 확인해야 합니다.

이 가이드에 대한 질문이나 피드백을 보내려면 아래 응답 양식을 사용하십시오. 이 시리즈의 세 번째 파트에서는 ​​셸 추적 디버깅 모드를 설명하고 사용하는 방법으로 이동합니다.