ShellCheck là một công cụ phân tích tĩnh hiển thị các cảnh báo và đề xuất liên quan đến mã xấu trong các tập lệnh shell bash / sh. Nó có thể được sử dụng theo một số cách: từ web bằng cách dán tập lệnh shell của bạn vào một trình soạn thảo trực tuyến (Ace – một trình soạn thảo mã độc lập được viết bằng JavaScript) trong https://www.shellcheck.net (nó luôn được đồng bộ hóa với cam kết git mới nhất và là cách đơn giản nhất để sử dụng ShellCheck) để có phản hồi tức thì.

Ngoài ra, bạn có thể cài đặt nó trên máy của mình và chạy nó từ thiết bị đầu cuối, tích hợp nó với trình soạn thảo văn bản cũng như trong các bộ xây dựng hoặc thử nghiệm của bạn.

Có ba điều ShellCheck chủ yếu thực hiện:

  • Nó chỉ ra và giải thích các vấn đề cú pháp điển hình của người mới bắt đầu khiến trình bao đưa ra các thông báo lỗi khó hiểu.
  • Nó chỉ ra và giải thích các vấn đề ngữ nghĩa cấp độ trung gian điển hình gây ra một lớp vỏ hoạt động kỳ lạ và phản trực giác.
  • Nó cũng chỉ ra những cảnh báo nhỏ, các trường hợp góc cạnh và cạm bẫy có thể khiến tập lệnh làm việc của người dùng nâng cao bị lỗi trong các trường hợp trong tương lai.

Trong bài viết này, chúng tôi sẽ hướng dẫn cách cài đặt và sử dụng ShellCheck theo nhiều cách khác nhau để tìm lỗi hoặc mã xấu trong các tập lệnh shell của bạn trong Linux.

Cách cài đặt và sử dụng ShellCheck trong Linux

ShellCheck có thể dễ dàng cài đặt cục bộ thông qua trình quản lý gói của bạn như được hiển thị.

Trên Debian / Ubuntu

# apt-get install shellcheck

Trên RHEL / CentOS

# yum -y install epel-release
# yum install ShellCheck

Trên Fedora

# dnf install ShellCheck

Sau khi cài đặt ShellCheck, chúng ta hãy xem cách sử dụng ShellCheck trong các phương pháp khác nhau mà chúng tôi đã đề cập trước đây.

Sử dụng ShellCheck Từ Web

Đi đến https://www.shellcheck.net và dán tập lệnh của bạn vào trình chỉnh sửa Ace được cung cấp, bạn sẽ thấy đầu ra ở cuối trình chỉnh sửa như thể hiện trong ảnh chụp màn hình bên dưới.

Trong ví dụ sau, tập lệnh vỏ thử nghiệm bao gồm các dòng sau:

#!/bin/bash
#declare variables
MINARGS=2
E_NOTROOT=50
E_MINARGS=100
  
#echo values of variables 
echo $MINARGS
echo $E_NONROOT
exit 0;
ShellCheck – Công cụ phân tích tập lệnh Shell trực tuyến

Từ ảnh chụp màn hình ở trên, hai biến đầu tiên E_NOTROOTE_MINARGS đã được khai báo nhưng không được sử dụng, ShellCheck báo cáo những điều này là suggestive errors:

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

Sau đó, thứ hai, tên sai (trong câu lệnh echo $E_NONROOT) đã được sử dụng để echo variable E_NOTROOTđó là lý do tại sao ShellCheck hiển thị lỗi:

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

Một lần nữa khi bạn nhìn vào các lệnh echo, các biến chưa được trích dẫn kép (giúp ngăn chặn hiện tượng nhấp nháy và tách từ), do đó Shell Check hiển thị cảnh báo:

SC2086: Double quote to prevent globbing and word splitting.

Sử dụng ShellCheck Từ Terminal

Bạn cũng có thể chạy ShellCheck từ dòng lệnh, chúng ta sẽ sử dụng cùng một tập lệnh shell ở trên như sau:

$ shellcheck test.sh
ShellCheck - Kiểm tra mã lỗi trong tập lệnh Shell
ShellCheck – Kiểm tra mã lỗi trong tập lệnh Shell

Sử dụng ShellCheck Từ Trình soạn thảo Văn bản

Bạn cũng có thể xem ShellCheck đề xuất và cảnh báo trực tiếp trong nhiều trình soạn thảo khác nhau, đây có lẽ là cách sử dụng ShellCheck hiệu quả hơn, khi bạn lưu tệp, nó sẽ hiển thị cho bạn bất kỳ lỗi nào trong mã.

Trong Vimsử dụng ALE hoặc Syntastic (chúng tôi sẽ sử dụng cái này):

Bắt đầu bằng cách cài đặt Pathogen để dễ dàng cài đặt syntastic. Chạy các lệnh dưới đây để nhận được pathogen.vim và các thư mục nó cần:

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

Sau đó, thêm cái này vào của bạn ~/.vimrc:

execute pathogen#infect()

Khi bạn đã cài đặt mầm bệnh và bây giờ bạn có thể đưa tổng hợp vào ~/.vim/bundle như sau:

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

Tiếp theo, đóng vim và khởi động lại để tải lại, sau đó gõ lệnh bên dưới:

:Helptags

Nếu mọi việc suôn sẻ, bạn nên có ShellCheck hội nhập với Vimcác ảnh chụp màn hình sau đây cho thấy cách nó hoạt động bằng cách sử dụng cùng một tập lệnh ở trên.

Kiểm tra mã tập lệnh Bad Shell trong Vim
Kiểm tra mã tập lệnh Bad Shell trong Vim

Trong trường hợp bạn gặp lỗi sau khi làm theo các bước trên, thì có thể bạn đã không cài đặt Pathogen một cách chính xác. Làm lại các bước nhưng điều này đảm bảo rằng bạn đã làm như sau:

  • Tạo ra cả hai ~/.vim/autoload~/.vim/bundle các thư mục.
  • Đã thêm dòng thực thi mầm bệnh # infect () vào của bạn ~/.vimrc.
  • Có phải bản sao git của tổng hợp bên trong không ~/.vim/bundle.
  • Sử dụng các quyền thích hợp để truy cập tất cả các thư mục trên.

Bạn cũng có thể sử dụng các trình chỉnh sửa khác để kiểm tra mã xấu trong các tập lệnh shell như:

  • Trong Emacssử dụng Flycheck.
  • Trong Sublime, hãy sử dụng SublimeLinter.
  • Trong Atom, hãy sử dụng Linter.
  • Trong hầu hết các trình soạn thảo khác, sử dụng khả năng tương thích lỗi GCC.

Lưu ý: Sử dụng thư viện mã xấu để thực hiện nhiều ShellChecking hơn.

Kho lưu trữ Github ShellCheck: https://github.com/koalaman/shellcheck

Đó là nó! Trong bài viết này, chúng tôi đã hướng dẫn cách cài đặt và sử dụng ShellCheck để tìm lỗi hoặc mã xấu trong các tập lệnh shell của bạn trong Linux. Chia sẻ suy nghĩ của bạn với chúng tôi qua phần bình luận bên dưới.

Bạn có biết bất kỳ công cụ tương tự nào khác ngoài đó không? Nếu có, hãy chia sẻ thông tin về họ trong phần bình luận.