본문 바로가기
프로그래밍/Linux

[Linux] 쉘 스크립트(Shell script) 6편 - shellcheck(쉘체크)

by HI_Ai 2023. 8. 31.
반응형

shellcheck는 쉘 스크립트에 대한 정적 분석 도구로, 스크립트의 문제점이나 개선할 수 있는 부분을 찾아줍니다. Bash, sh, dash, ksh 스크립트를 지원하며, 작성 중인 쉘 스크립트의 품질을 향상시키고, 버그, 일반적인 실수 또는 사용하지 않는 코드를 발견하는 데 유용합니다.

 

shellcheck의 주요 기능:

문법 오류: 일반적인 문법 오류나 타이포를 감지합니다.
미사용 변수: 스크립트 내에서 선언되었지만 사용되지 않는 변수를 찾아줍니다.
코드 품질: 코드에서 개선할 수 있는 부분이나 더 나은 방법을 제안합니다.
보안: 안전하지 않은 코드 또는 취약한 패턴을 감지하고 권장 사항을 제공합니다.

 

1. 설치하기

대부분의 패키지 관리자를 통해 shellcheck를 설치할 수 있습니다.

sudo apt install shellcheck

 

2. 사용하기

예시 쉘 스크립트('example_script.sh')

#!/bin/bash

# 사용하지 않는 변수
unused_var="I am not used"

# 따옴표가 없어 공백을 포함한 경로에서 문제 발생 가능
path=/some directory/with spaces

# 잘못된 변수 참조 방법
echo $paths

# if 문장에서 '-z' 테스트 누락
if [ $1 ]
then
    echo "You provided an argument!"
fi

위의 스크립트에는 여러 문제점이 있습니다. 이제 shellcheck를 사용하여 이러한 문제점을 확인해 보겠습니다.

 

shellcheck 실행
터미널에서 다음과 같이 명령을 실행합니다.

shellcheck example_script.sh

 

shellcheck의 출력 결과:

In example_script.sh line 5:
unused_var="I am not used"
^---------^ SC2034: unused_var appears unused. Verify use (or export if used externally).

In example_script.sh line 8:
path=/some directory/with spaces
      ^-- SC2086: Double quote to prevent globbing and word splitting.

In example_script.sh line 11:
echo $paths
     ^----^ SC2154: paths is referenced but not assigned.
     ^----^ SC2086: Double quote to prevent globbing and word splitting.

In example_script.sh line 14:
if [ $1 ]
      ^-- SC2166: Prefer [ p ] && [ q ] as [ p -a q ] is not well defined.
      ^-- SC2086: Double quote to prevent globbing and word splitting.

 

위의 출력에서 shellcheck는 스크립트에 있는 문제점들을 지적하고 있습니다. 또한 각 문제점에 대한 설명과 SC 번호를 통해 추가 정보를 얻을 수 있습니다.

이렇게 shellcheck를 사용하면 쉘 스크립트의 문제점을 빠르게 발견하고 수정하는 데 도움을 받을 수 있습니다.

반응형