웹사이트 검색

ShellCheck - 쉘 스크립트에 대한 경고 및 제안을 표시하는 도구


ShellCheck는 bash/sh 쉘 스크립트의 잘못된 코드에 관한 경고 및 제안을 표시하는 정적 분석 도구입니다. 여러 가지 방법으로 사용할 수 있습니다. 웹에서 https://www.shellcheck.net의 온라인 편집기(Ace – JavaScript로 작성된 독립형 코드 편집기)에 셸 스크립트를 붙여넣습니다(항상 최신 git과 동기화됨). 즉각적인 피드백을 위해 ShellCheck를 사용하는 가장 간단한 방법입니다.

또는 컴퓨터에 설치하고 터미널에서 실행하고 텍스트 편집기는 물론 빌드 또는 테스트 제품군에 통합할 수도 있습니다.

ShellCheck가 주로 수행하는 세 가지 작업은 다음과 같습니다.

  • 쉘이 암호 오류 메시지를 표시하게 만드는 일반적인 초보자의 구문 문제를 지적하고 설명합니다.
  • 이는 쉘이 이상하고 반직관적으로 동작하게 만드는 일반적인 중간 수준 의미론적 문제를 지적하고 설명합니다.
  • 또한 향후 상황에서 고급 사용자의 작업 스크립트가 실패할 수 있는 미묘한 경고, 특수 사례 및 함정을 지적합니다.

이 기사에서는 Linux의 쉘 스크립트에서 버그나 잘못된 코드를 찾기 위해 다양한 방법으로 ShellCheck를 설치하고 사용하는 방법을 보여줍니다.

Linux에서 ShellCheck를 설치하고 사용하는 방법

ShellCheck는 표시된 것처럼 패키지 관리자를 통해 로컬로 쉽게 설치할 수 있습니다.

데비안/우분투에서

apt-get install shellcheck

RHEL/CentOS에서

yum -y install epel-release
yum install ShellCheck

페도라에서

dnf install ShellCheck

ShellCheck가 설치되면 앞에서 언급한 다양한 방법으로 ShellCheck를 사용하는 방법을 살펴보겠습니다.

웹에서 ShellCheck 사용

https://www.shellcheck.net으로 이동하여 제공된 Ace 편집기에 스크립트를 붙여넣으면 아래 스크린샷과 같이 편집기 하단에 출력이 표시됩니다.

다음 예에서 테스트 셸 스크립트는 다음 줄로 구성됩니다.

#!/bin/bash
#declare variables
MINARGS=2
E_NOTROOT=50
E_MINARGS=100
  
#echo values of variables 
echo $MINARGS
echo $E_NONROOT
exit 0;

위 스크린샷에서 처음 두 변수 E_NOTROOTE_MINARGS가 선언되었지만 사용되지 않았습니다. ShellCheck는 이를 "제안 오류"로 보고합니다.

SC2034: E_NOTROOT appears unused. Verify it or export it.
SC2034: E_MINARGS appears unused. Verify it or export it. 

두 번째로 잘못된 이름(echo $E_NONROOT 문에서)이 E_NOTROOT 변수 E_NOTROOT을 에코하는 데 사용되었습니다. 이것이 바로 ShellCheck가 오류를 표시하는 이유입니다.

SC2153: Possible misspelling: E_NONROOT may not be assigned, but E_NOTROOT is

다시 echo 명령을 보면 변수가 큰따옴표로 묶이지 않았으므로(글로빙 및 단어 분할을 방지하는 데 도움이 됨) Shell Check에서 다음 경고를 표시합니다.

SC2086: Double quote to prevent globbing and word splitting.

터미널에서 ShellCheck 사용

명령줄에서 ShellCheck를 실행할 수도 있습니다. 위와 동일한 쉘 스크립트를 다음과 같이 사용하겠습니다.

shellcheck test.sh

텍스트 편집기에서 ShellCheck 사용

다양한 편집기에서 직접 ShellCheck 제안 및 경고를 볼 수도 있습니다. 이는 아마도 ShellCheck를 사용하는 더 효율적인 방법일 것입니다. 파일을 저장하면 코드의 오류가 표시됩니다.

Vim에서는 ALE 또는 Syntastic을 사용합니다(우리는 이것을 사용합니다):

Syntastic을 쉽게 설치할 수 있도록 Pathogen을 설치하는 것부터 시작하세요. 아래 명령을 실행하여 pathogen.vim 파일과 필요한 디렉터리를 가져옵니다.

mkdir -p ~/.vim/autoload ~/.vim/bundle && curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

그런 다음 ~/.vimrc 파일에 다음을 추가하세요.

execute pathogen#infect()

병원체를 설치하고 나면 이제 다음과 같이 구문을 ~/.vim/bundle에 넣을 수 있습니다:

cd ~/.vim/bundle && git clone --depth=1 https://github.com/vim-syntastic/syntastic.git

그런 다음 vim을 닫고 다시 시작하여 다시 로드한 후 아래 명령을 입력하세요.

:Helptags

모든 것이 순조롭게 진행된다면 Vim과 통합된 ShellCheck가 있어야 합니다. 다음 스크린샷은 위와 동일한 스크립트를 사용하여 작동하는 방식을 보여줍니다.

위 단계를 수행한 후 오류가 발생하는 경우 Pathogen을 올바르게 설치하지 않았을 가능성이 있습니다. 단계를 다시 실행하되 다음을 수행했는지 확인하세요.

  • ~/.vim/autoload~/.vim/bundle 디렉터리를 모두 생성했습니다.
  • ~/.vimrc 파일에 실행 병원체#infect() 줄을 추가했습니다.
  • ~/.vim/bundle 내부에서 구문의 git clone을 수행했습니다.
  • 위의 모든 디렉터리에 액세스하려면 적절한 권한을 사용하세요.

다른 편집기를 사용하여 다음과 같은 쉘 스크립트의 잘못된 코드를 확인할 수도 있습니다.

  • Emacs에서는 Flycheck를 사용합니다.
  • Sublime에서는 SublimeLinter를 사용합니다.
  • Atom에서는 Linter를 사용합니다.
  • 대부분의 다른 편집기에서는 GCC 오류 호환성을 사용합니다.

참고: 더 많은 ShellChecking을 수행하려면 잘못된 코드 갤러리를 사용하세요.

ShellCheck Github 저장소: https://github.com/koalaman/shellcheck

그게 다야! 이 문서에서는 ShellCheck를 설치하고 사용하여 Linux의 쉘 스크립트에서 버그나 잘못된 코드를 찾는 방법을 보여주었습니다. 아래 댓글 섹션을 통해 여러분의 생각을 공유해 주세요.

다른 유사한 도구를 알고 계십니까? 그렇다면 댓글을 통해 해당 정보를 공유해 주세요.