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
บน Fedora
# 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 ) ใช้เพื่อ เลือกตัวแปร E_NOTROOT นั่นคือสาเหตุที่ ShellCheck แสดงข้อผิดพลาด:
SC2153: Possible misspelling: E_NONROOT may not be assigned, but E_NOTROOT is
อีกครั้งเมื่อคุณดูคำสั่ง echo ตัวแปรไม่ได้ถูกยกมาสองครั้ง (ช่วยป้องกัน globbing และ word split) ดังนั้น Shell Check จะแสดงคำเตือน:
SC2086: Double quote to prevent globbing and word splitting.
การใช้ ShellCheck จากเทอร์มินัล
คุณยังสามารถเรียกใช้ 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 ไดเรกทอรี
- เพิ่มบรรทัดปฏิบัติการของเชื้อโรค#infect() ใน ~/.vimrc ของคุณ ไฟล์.
- ทำการโคลน git ของ syntastic ภายใน ~/.vim/bundle .
- ใช้สิทธิ์ที่เหมาะสมเพื่อเข้าถึงไดเร็กทอรีด้านบนทั้งหมด
คุณยังสามารถใช้ตัวแก้ไขอื่นเพื่อตรวจสอบโค้ดที่ไม่ถูกต้องในเชลล์สคริปต์ เช่น:
- ใน Emac , ใช้ Flycheck .
- ใน Sublime ใช้ SublimeLinter
- ใน Atom ใช้ประโยชน์จาก Linter
- ในโปรแกรมแก้ไขอื่นๆ ส่วนใหญ่ ให้ใช้ความเข้ากันได้ของข้อผิดพลาด GCC
หมายเหตุ :ใช้แกลเลอรีโค้ดที่ไม่ถูกต้องเพื่อดำเนินการ ShellChecking มากขึ้น
ที่เก็บ ShellCheck Github:https://github.com/koalaman/shellcheck
แค่นั้นแหละ! ในบทความนี้ เราได้แสดงวิธีการติดตั้งและใช้งาน ShellCheck เพื่อค้นหาจุดบกพร่องหรือโค้ดที่ไม่ถูกต้องในเชลล์สคริปต์ของคุณใน Linux แบ่งปันความคิดของคุณกับเราผ่านทางส่วนความคิดเห็นด้านล่าง
คุณรู้จักเครื่องมืออื่นที่คล้ายคลึงกันหรือไม่? ถ้าใช่ ก็แชร์ข้อมูลเกี่ยวกับพวกเขาในความคิดเห็นด้วย