ค้นหาเว็บไซต์

ShellCheck - เครื่องมือที่แสดงคำเตือนและคำแนะนำสำหรับเชลล์สคริปต์


ShellCheck เป็นเครื่องมือวิเคราะห์แบบคงที่ที่แสดงคำเตือนและคำแนะนำเกี่ยวกับโค้ดที่ไม่ถูกต้องในเชลล์สคริปต์ bash/sh สามารถใช้งานได้หลายวิธี: จากเว็บโดยการวางเชลล์สคริปต์ของคุณในโปรแกรมแก้ไขออนไลน์ (Ace – โปรแกรมแก้ไขโค้ดแบบสแตนด์อโลนที่เขียนด้วย JavaScript) ใน https://www.shellcheck.net (จะมีการซิงโครไนซ์กับ git ล่าสุดเสมอ กระทำและเป็นวิธีที่ง่ายที่สุดในการทดลองใช้ ShellCheck) เพื่อรับคำติชมทันที

หรือคุณสามารถติดตั้งบนเครื่องของคุณและเรียกใช้จากเทอร์มินัล รวมเข้ากับโปรแกรมแก้ไขข้อความของคุณ รวมถึงในชุดสร้างหรือชุดทดสอบของคุณ

มีสามสิ่งที่ ShellCheck ทำเป็นหลัก:

  • มันชี้ให้เห็นและอธิบายปัญหาไวยากรณ์ของผู้เริ่มต้นทั่วไปที่ทำให้เชลล์ส่งข้อความแสดงข้อผิดพลาดที่เป็นความลับ
  • มันชี้ให้เห็นและอธิบายปัญหาความหมายระดับกลางทั่วไปที่ทำให้เชลล์มีพฤติกรรมแปลก ๆ และต่อต้านโดยสัญชาตญาณ
  • นอกจากนี้ยังชี้ให้เห็นถึงคำเตือนที่ละเอียดอ่อน กรณีมุม และข้อผิดพลาดที่อาจทำให้สคริปต์การทำงานของผู้ใช้ขั้นสูงล้มเหลวในสถานการณ์ในอนาคต

ในบทความนี้ เราจะแสดงวิธีการติดตั้งและใช้ ShellCheck ในรูปแบบต่างๆ เพื่อค้นหาข้อบกพร่องหรือโค้ดที่ไม่ถูกต้องในเชลล์สคริปต์ของคุณใน Linux

วิธีการติดตั้งและใช้ ShellCheck ใน Linux

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_NOTROOT และ E_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) ถูกใช้เพื่อ ตัวแปร echo 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 จาก Terminal

คุณยังสามารถเรียกใช้ ShellCheck ได้จากบรรทัดคำสั่ง เราจะใช้เชลล์สคริปต์เดียวกันด้านบนดังนี้:

shellcheck test.sh

การใช้ ShellCheck จากโปรแกรมแก้ไขข้อความ

คุณยังสามารถดูคำแนะนำและคำเตือนของ ShellCheck ได้โดยตรงในตัวแก้ไขที่หลากหลาย นี่อาจเป็นวิธีที่มีประสิทธิภาพมากกว่าในการใช้ ShellCheck เมื่อคุณบันทึกไฟล์แล้ว มันจะแสดงข้อผิดพลาดในโค้ดให้คุณเห็น

ใน Vim ให้ใช้ ALE หรือ Syntastic (เราจะใช้สิ่งนี้):

เริ่มต้นด้วยการติดตั้ง เชื้อโรค เพื่อให้ติดตั้ง syntastic ได้ง่าย เรียกใช้คำสั่งด้านล่างเพื่อรับไฟล์ pathogen.vim และไดเรกทอรีที่ต้องการ:

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

จากนั้นเพิ่มสิ่งนี้ลงในไฟล์ ~/.vimrc ของคุณ:

execute pathogen#infect()

เมื่อคุณติดตั้งเชื้อโรคแล้ว และตอนนี้คุณสามารถใส่ syntastic ลงใน ~/.vim/bundle ได้ดังนี้:

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

ถัดไป ปิด vim และเริ่มสำรองข้อมูลเพื่อรีโหลด จากนั้นพิมพ์คำสั่งด้านล่าง:

:Helptags

หากทุกอย่างเป็นไปด้วยดี คุณควรรวม ShellCheck เข้ากับ Vim ภาพหน้าจอต่อไปนี้แสดงวิธีการทำงานโดยใช้สคริปต์เดียวกันด้านบน

ในกรณีที่คุณได้รับข้อผิดพลาดหลังจากทำตามขั้นตอนข้างต้น แสดงว่าคุณอาจติดตั้ง เชื้อโรค ไม่ถูกต้อง ทำซ้ำขั้นตอนต่างๆ แต่ต้องแน่ใจว่าคุณได้ทำสิ่งต่อไปนี้:

  • สร้างทั้งไดเร็กทอรี ~/.vim/autoload และ ~/.vim/bundle
  • เพิ่มบรรทัดดำเนินการ Pathogen#infect() ให้กับไฟล์ ~/.vimrc ของคุณ
  • ทำ git clone ของ syntastic ภายใน ~/.vim/bundle หรือไม่
  • ใช้สิทธิ์ที่เหมาะสมในการเข้าถึงไดเร็กทอรีข้างต้นทั้งหมด

คุณยังสามารถใช้โปรแกรมแก้ไขอื่นเพื่อตรวจสอบโค้ดที่ไม่ถูกต้องในเชลล์สคริปต์ เช่น:

  • ใน Emacs ให้ใช้ Flycheck
  • ใน Sublime จ้าง SublimeLinter
  • ใน Atom ให้ใช้ Linter
  • ในตัวแก้ไขอื่นๆ ส่วนใหญ่ ให้ใช้ความเข้ากันได้ของข้อผิดพลาด GCC

หมายเหตุ: ใช้แกลเลอรีโค้ดที่ไม่ถูกต้องเพื่อดำเนินการ ShellChecking เพิ่มเติม

พื้นที่เก็บข้อมูล ShellCheck Github: https://github.com/koalaman/shellcheck

แค่นั้นแหละ! ในบทความนี้ เราได้แสดงวิธีการติดตั้งและใช้ ShellCheck เพื่อค้นหาข้อบกพร่องหรือโค้ดที่ไม่ถูกต้องในเชลล์สคริปต์ของคุณใน Linux แบ่งปันความคิดของคุณกับเราผ่านทางส่วนความคิดเห็นด้านล่าง

คุณรู้จักเครื่องมืออื่นที่คล้ายคลึงกันบ้างไหม? ถ้าใช่ให้แบ่งปันข้อมูลเกี่ยวกับพวกเขาในความคิดเห็นด้วย