เชลล์สคริปต์เบื้องต้น ตอนที่ 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.