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 แบ่งปันความคิดของคุณกับเราผ่านทางส่วนความคิดเห็นด้านล่าง
คุณรู้จักเครื่องมืออื่นที่คล้ายคลึงกันบ้างไหม? ถ้าใช่ให้แบ่งปันข้อมูลเกี่ยวกับพวกเขาในความคิดเห็นด้วย