เชลล์สคริปต์เบื้องต้น ตอนที่ 1
www.tanabutr.co.th/photobook
ขอเริ่มเรื่องสั้นๆแนะนำเชลล์สคริปต์เบื้องต้นไปแต่ละวันแล้วกันครับจะได้ไม่หมดมุขมีอะไรเขียนใน blog บ้าง. อาจจะเป็นประโยชน์สำหรับผู้ที่เริ่มใช้ลินุกซ์และอยากเรียนรู้ลึกไปอีกหน่อยนอกเหนือจากการใช้ desktop environment ทั่วๆไปครับ.
เชลล์คืออะไร
ตอบง่ายๆ, เชลล์ (shell) คือโปรแกรมแปลคำสั่งที่พิมพ์จากคีย์บอร์ดแล้วตีความคำสั่งที่พิมพ์เพื่อทำงานต่อไป. ที่เรียกว่าเชลล์เพราะเชลล์เป็นเหมือนเปลือกหุ้มเคอร์เนลไว้, เป็นตัวกลาง (interface) ระหว่างผู้ใช้กับเคอร์เนล. การสั่งงานเช่นการเรียกใช้โปรเแกรมจากผู้ใช้ทุกอย่างต้องผ่านทางเชลล์. แต่ในสมัยนี้การสั่งงานทำผ่าน GUI (Graphical User Interface) ก็ได้.
ประเภทของเชลล์
โปรแกรมเชลล์ในโลกนี้มีหลายตัว. โปรแกรมเชลล์เริ่มแรกสมัยที่สร้างยูนิกซ์ใหม่ๆได้แก่ Bourn shell (รู้จักกันในชื่อ sh) มีชื่อตามผู้สร้างได้แก่นาย Steve Bourne. ต่อจากนั้นในสมัยของ BSD ยูนิกซ์นาย Bill Joy ก็สร้างเชลล์ตัวใหม่ที่มีคุณสมบัติเพิ่มเติมต่างๆเช่น ประวัติคำสั่ง (history), การควบคุมจ็อบ (job control) ฯลฯ. เชลล์ตัวใหม่ที่ Bill Joy สร้างนี้มีไวย์กรณ์การใช้งานคล้ายเหมือนภาษาซี (C language) และมีชื่อว่า C shell (csh). ในภายหลังก็มีเชลล์อื่นๆอีกมากมายเช่น Korn shell (ksh) มีไวย์กรณ์เหมือนกับ sh แต่มีความสามารถที่ csh ทำได้. ส่วนเชลล์ปริยายที่ลินุกซ์ใช้คือ GNU Bourne-Again Shell หรือเป็นที่รู้จักกันในนามของ bash สร้างโดย Free Software Foundation. นอกจากนี้ยังมีเชลล์สุดขั้วของเชลล์คือ zsh. "z" ในที่นี้หมายถึงตัวอักษรตัวสุดท้ายคือสื่อความหมายว่าอยากให้เป็นเชลล์ตัวสุดท้ายและเป็นเชลล์ที่ดีที่สุด. ผมไม่เคยใช้ zsh แต่ดูๆแล้วทำอะไรต่อมิอะไรได้ที่เชลล์อื่นๆไม่ทำ.
Hello world!
เชลล์สคริปต์เป็นไฟล์เท็กซ์ธรรมดาจะสร้างด้วยบรรณาธิกรณ์ (editor) อะไรก็ได้ที่ชอบเช่น vi, emacs, nano, gedit ฯลฯ. ต่อไปนี้เป็นตัวอย่างเชลล์สคริปต์ที่แสดงคำว่า "Hello world!" บนหน้าจอครับ.
#!/bin/sh echo "Hello world!"
สมมติว่าไฟล์นี้มีชื่อว่า hello.sh ก่อนที่จะรันสคริปต์ได้ต้องทำให้ไฟล์นี้สามารถกระทำการได้ก่อนด้วยคำสั่ง chmod.
$ ls -l hello.sh -rw-r--r-- 1 poonlap users 30 Nov 24 23:17 hello.sh $ chmod +x hello.sh $ ls -l hello.sh -rwxr-xr-x 1 poonlap users 30 Nov 24 23:17 hello.sh
ถ้าดูไฟล์ด้วยคำสั่ง ls จะเห็นว่าสิทธิ์การใช้ไฟล์เปลี่ยนเป็น -rwxr-xr-x. "x" หมายความว่ากระทำการได้ (executable).
เสร็จแล้วลองรันเชลล์สคริปต์ดู.
$ ./hello.sh Hello world!
เชลล์สคริปต์นี้ไม่ได้ทำอะไรพิเศษเพียงแต่ใช้คำสั่ง echo แสดงคำว่า "Hello world!" ออกทางหน้าจอเท่านั้น. บรรทัดแรกของเชลล์สคริปต์ทุกตัวต้องขึ้นต้นด้วย.
#!/bin/sh
"#!" เรียกว่า sha-bang เป็นสัญลักษณ์บอกว่าไฟล์นี้เป็นสคริปต์และใช้ /bin/sh เป็นตัวแปรภาษา (interpreter). ให้สังเกตว่าตัวแปรภาษาคือ /bin/sh ไม่ใช่ bash. อันนี้เพื่อความเข้ากันได้กับเชลล์สคริปต์เก่าๆเช่น Bourne shell จึงใช้ /bin/sh. จริงๆแล้ว /bin/sh เป็น symbolic link ไปหา /bin/bash.