반응형
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를 사용하면 쉘 스크립트의 문제점을 빠르게 발견하고 수정하는 데 도움을 받을 수 있습니다.
반응형
'프로그래밍 > Linux' 카테고리의 다른 글
[Linux] 리눅스 운영체제의 부팅 과정(systemd) (0) | 2023.09.01 |
---|---|
[Linux] 쉘 스크립트(shell script) - 7편 서비스 등록(systemd) (0) | 2023.08.31 |
[Linux] 쉘 스크립트(Shell script) 5편 - 트랩(trap) 사용하기, 에러 옵션(set -e, set -o) (0) | 2023.08.31 |
[Linux] 쉘 스크립트(Shell script) 4편 - 디버그 모드, 에러메시지 출력 (0) | 2023.08.31 |
[Linux] 쉘 스크립트(Shell script) 3편 - 배경 작업 및 작업 제어 (0) | 2023.08.31 |