# การเขียนโปรแกรมเชลล์

การศึกษาเกี่ยวกับเรื่องของเชลล์และการเขียนโปรแกรมเชลล์ จะช่วยให้คุณมีความเข้าใจ ขั้นพื้นฐานในการใช้งานของยูนิกซ์ คุณจะเข้าใจเรื่องของตัวอักขระพิเศษ หรือรูปแบบ การอ้างอิงของไฟล์ ซึ่งจะมีความจำเป็นเมื่อคุณต้องใช้งานยูนิกซ์ในขั้นสูง หรือเขียน โปรแกรมโดยใช้เครื่องมืออื่นๆ เช่น ภาษาซี, เพิร์ล, หรือ ทิคเคิ่ล/ทีเค เป็นต้น

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

โครงสร้างของระบบ UNIX]">

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

### เชลล์ทำอะไรบ้าง

สมมุติว่าเราได้ทำการป้อนคำสั่ง

    $ sort -n phonelist > phonelist.sorted

ให้กับเชลล์ ซึ่งจะมีความหมายว่า ให้เรียงลำดับรายการในแต่ละบรรทัดของไฟล์ phonelist (เรียงลำดับด้วยตัวเลข) แล้วเก็บผลลัพธ์ลงไปในไฟล์ใหม่ชื่อไฟล์ phonelist.sorted ขั้นตอนการทำงานจะเป็นดังต่อไปนี้

- แตกคำแต่ละคำในบรรทัดคำสั่ง ออกเป็น sort, -n, phonelist, >, และ phonelist.sorted
- แยกและวิเคราะห์หน้าที่ของคำทั้งหมด เช่น sort เป็นคำสั่งให้ทำการจัดลำดับ -n และ phonelist เป็น argument ที่ทำการส่งให้กับคำสั่ง ส่วน > และ phonelist.sorted เป็นคำสั่งที่เกี่ยวกับเรื่องของ การนำ ข้อมูล/ผลลัพธ์ เข้า-ออก (I/O instruction)
- กำหนดทิศทางของการนำผลลัพธ์ออก "> phonelist.sorted" ก็คือการนำ ผลลัพธ์จากอุปกรณ์แสดงผลมาตรฐาน (standard output) ไปเก็บไว้ที่ไฟล์ ที่ชื่อ phonelist.sorted
- หาคำสั่ง sort (อยู่ในไดเรกทอรี /usr/bin ) และเริ่มทำงานโดยใช้ argument -n และ phonelist ด้วย

### ประวัติของเชลล์

ในระบบยูนิกซ์เราสามารถเลือกใช้เชลล์ได้หลายแบบ ซึ่งค่อนข้างจะแตกต่างจากระบบ ปฏิบัติการดอสที่เราจะต้องถูกจำกัดให้ใช้เชลล์ที่ติดตั้งมาแล้วกับดอส (command.com) ได้เพียงโปรแกรมเดียว

สำหรับโปรแกรมเชลล์โปรแกรมแรกนั้น คือโปรแกรม โบนเชลล์ (Bourne Shell) ซึ่ง ได้ถูกตั้งชื่อตามชื่อของผู้คิดค้นโปรแกรมนี้ขึ้น (สตีเฟน โบน : Steven Bourne) โบน เชลล์นี้ได้ถูกแจกจ่ายไปพร้อมกับ UNIX version 7 ซึ่งเป็นเวอร์ชั่นที่ได้รับความ นิยมมากที่สุดตัวหนึ่ง ในปีคศ. 1979

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

โปรแกรมเชลล์ที่ถูกทำการพัฒนาขึ้นมาภายหลังและได้รับความนิยมอย่างสูงก็คือ C shell หรือ csh ซึ่ง Bill Joy ซึ่ง (ในเวลานั้น) อยู่ที่มหาวิทยาลัย California at Berkeley ซึ่งเป็นส่วนหนึ่งของ ระบบยูนิกซ์รุ่นของ Berkeley System Distribution (BSD) หรือ BSD Unix สาเหตุที่มีการเรียกเชลล์นี้ว่า C shell ก็เนื่องจากว่า มีรูปแบบของคำสั่ง และการใช้งานที่คล้ายกับโปรแกรมภาษา C ซึ่งจะทำให้ผู้ใช้ที่เป็นโปรแกรมเมอร์มีความ คุ้นเคยกับการใช้งานเชลล์นี้มาก

โปรแกรมเชลล์อื่นที่ถูกทำการพัฒนาและได้รับความนิยมสูงอีกโปรแกรมหนึ่งก็คือ Korn Shell (คอร์นเชลล์) หรือ ksh ถูกพัฒนาขึ้นมาโดย David Korn จาก AT&T Bell Lab ในราวๆกลางทศวรรษ 1980 โปรแกรมคอร์นเชลล์นี้มีความเข้ากันได้กับโบนเชลล์ นั่นหมาย ความว่าผู้ที่เคยใช้งานโบนเชลล์มาก่อนสามารถจะใช้งาน คอร์นเชลล์ได้โดยง่าย นอกจาก นี้ คอร์นเชลล์ก็ยังมีรูปแบบพิเศษบางอย่างที่ถูกเพิ่มเติมเข้ามาเพื่อให้ผู้ใช้ สามารถใช้งานได้สะดวกขึ้นด้วย หากคุณต้องการจะศึกษาเกี่ยวกับเรื่องของการเขียน เชลล์โปรแกรมมิงโดยละเอียดแล้ว ขอแนะนำให้คุณค้นหาหนังสือที่อธิบายเรื่องของ คอร์น เชลล์ เนื่องจากในปัจจุบันจะถือว่า คอร์นเชลล์ เป็นโปรแกรมเชลล์มาตรฐานของระบบ ยูนิกซ์

### โปรแกรมเชลล์อื่นๆ

นอกจาก โบนเชลล์ ซีเชลล์ และ คอร์นเชลล์แล้ว ยังมีผู้พัฒนาโปรแกรมเชลล์อื่นๆที่มี คุณภาพสูงออกมาอีกเช่น pdksh (Public Domain Korn shell) และ bash (Bourne again shell) เนื่องจากการได้รับความนิยมอย่างสูงของคอร์นเชลล์ ทำให้มีผู้ที่พัฒนา โปรแกรมเชลล์จำนวนมากออกมาโดยอ้างอิงถึงคอร์นเชลล์ แต่ตัวคอร์นเชลล์ไม่ใช่ของที่แจก จ่ายโดยอิสระ USL (UNIX System Laboratories) ซึ่งปัจจุบันได้ถูกโอนไปอยู่กับบริษัท SCO Unix เป็นผู้ถือลิขสิทธิ์ของ คอร์นเชลล์อยู่

pdksh จึงถูกพัฒนาขึ้นมาโดยมีความเข้ากันได้กับ ksh ต้นฉบับ และ pdksh นี้สามารถทำ การแจกจ่ายได้ฟรี (public domain) ส่วน bash นั้นทาง FSF (Free Software Foundation) ได้เป็นผู้ทำการพัฒนาขึ้นมา ซึ่ง bash จะมีความเข้ากันได้กับ ksh แต่ก็มีความสามารถ บางส่วนของ csh ด้วย เราสามารถนำเอาโปรแกรมเชลล์ที่ถูกเขียนขึ้นเพื่อใช้กับคอร์น เชลล์ มาใช้กับ bash ได้ bash สามารถทำการแจกจ่ายได้ฟรีเช่นเดียวกัน

ในระบบลีนุกซ์คุณอาจสามารถเลือกติดตั้งเชลล์ได้หลายแบบ เช่น ash, bash, csh, tcsh, pdksh และ zsh คุณสามารถตรวจสอบได้ว่าในปัจจุบันคุณกำลังใช้เชลล์อะไรอยู่โดย ใช้คำสั่งต่อไปนี้

    $ echo $SHELL
    /bin/bash

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

    $ bash (call Bourne again shell)
    $ csh  (call c shell)

หรือสามารถเปลี่ยนแปลงดีฟอลท์เชลล์ ที่จะถูกเรียกขึ้นมาทุกครั้งที่มีการล็อกอินเข้า ใช้งานระบบ ได้จากแฟ้มข้อมูล /etc/passwd
ในการศึกษาเกี่ยวกับการเขียนโปรแกรมเชลล์นี้ จะอ้างอิงถึง คอร์นเชลล์เป็นหลัก คุณสามารถใช้ bash หรือ Bourne again shell เป็นเครื่องมือในการศึกษานี้ได้ เนื่องจากคำสั่งส่วนใหญ่ของคอร์นเชลล์สามารถนำไปใช้ใน bash ได้

HTML developed by Kaiwal Development Team (kaiwal@geocities.com)