• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
Office 指南

Office 指南

辦公室工作實用教學

  • Excel
  • Word
  • PowerPoint
  • Windows
  • PowerShell
  • R

ShellCheck:Bash Shell 指令稿檢查分析除錯工具教學與範例

介紹如何使用 ShellCheck 靜態指令稿分析工具,偵測 bash shell 指令稿中的臭蟲。


ShellCheck 是一個開放原始碼(GPLv3)的靜態指令稿分析工具,可以針對 bash/sh shell 指令稿進行檢查,偵測各種可能的程式碼問題,並提供改善建議。

ShellCheck 線上檢測工具

ShellCheck 提供了線上檢測 bash shell 指令稿的服務,只要將自己的 shell 指令稿貼上去,即可立即檢測指令稿中的臭蟲(bugs)。

ShellCheck 線上檢測工具
ShellCheck 線上檢測工具

Linux 安裝 ShellCheck

在 Linux 中若要安裝 ShellCheck,可以透過各種 Linux 中的套件管理系統來安裝:

# Ubuntu/Debian Linux 安裝 ShellCheck
sudo apt install shellcheck

# CentOS/RHEL/Fedora/Oracle Linux 安裝 ShellCheck
sudo yum install epel-release
sudo yum install ShellCheck

# Fedora Linux 安裝 ShellCheck
sudo dnf install ShellCheck

# Arch Linux 安裝 ShellCheck
sudo pacman -S shellcheck

macOS 安裝 ShellCheck

若在 macOS 中,則可以使用 MacPorts 或是 Homebrew 來安裝 ShellCheck:

# macOS 透過 MacPorts 安裝 ShellCheck
port install shellcheck

# macOS 透過 Homebrew 安裝 ShellCheck
brew install shellcheck

使用 ShellCheck 指令工具

假設我們一個 bash shell 指令稿內容如下:

#!/bin/bash
# 有問題的 Bash 指令稿
for f in $(ls *.m3u)
do
  grep -qi hq.*mp3 $f \
    && echo -e 'Playlist $f contains a HQ file in mp3 format'
done

假設這個指令稿的檔案名稱為 myscript.sh,我們可以利用 shellcheck 指令直接對此指令稿進行檢測:

# 檢測 Bash 指令稿
shellcheck myscript.sh
In script.sh line 3:
for f in $(ls *.m3u)
         ^-- SC2045: Iterating over ls output is fragile. Use globs.
              ^-- SC2035: Use ./*glob* or -- *glob* so names with dashes won't become options.


In script.sh line 5:
  grep -qi hq.*mp3 $f \
           ^-- SC2062: Quote the grep pattern so the shell won't interpret it.
                   ^-- SC2086: Double quote to prevent globbing and word splitting.


In script.sh line 6:
    && echo -e 'Playlist $f contains a HQ file in mp3 format'
               ^-- SC2016: Expressions don't expand in single quotes, use double quotes for that.

ShellCheck 在終端機中的輸出還會有顏色:

ShellCheck 輸出
ShellCheck 輸出

參考資料

  • nixCraft:Improve your bash/sh shell script with ShellCheck lint script analysis tool

分類:Linux

主要資訊欄

搜尋

近期文章

  • Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤
  • Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例
  • Linux 網路設定 ip 指令用法教學與範例
  • Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例
  • Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例
  • Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例
  • Linux 以 Cryptsetup 與 LUKS 加密磁碟教學與範例
  • Linux 使用 age 簡潔的加密、解密工具使用教學與範例

推薦網站

  • Udemy 線上教學課程
  • Coursera 線上教學課程

關注本站

  • 電子郵件
  • Facebook

公益

  • 家扶基金會
  • 台灣世界展望會
  • Yahoo 奇摩公益
  • igiving 公益網
  • 兒福聯盟

Copyright © 2021 · Office Guide