Command Line interface ---------------------------- Command line -- เร็วกว่า มีประสิทธิภาพสูงกว่า และมีความสมบูรณ์กว่า และในบางกรณีคำสั่งของ Command ไม่มีคำสั่งที่สมนัยกันใน Graphic User Interface องค์ประกอบของ Command Line ต้องการผลพิเศษอย่างไร | command [-option] | | ต้องการทำอะไร ต้องการทำกับอะไร การที่จะสามารถใช้งาน Command Line ได้อย่างมีประสิทธิภาพ ต้องเข้าใจอักขระที่มีความหมาย "พิเศษ" สำหรับ shell เสียก่อน อักขระพิเศษ (Special Characters) -------------------------------------- "อักขระพิเศษ" หมายถึงอักขระที่มีความหมายพิเศษสำหรับ shell การใช้งานส่วนใหญ่จะเกี่ยวข้องกับระบบแฟ้ม เรื่องนี้เป็นเรื่องที่ควรต้องรู้ ก่อนเพราะหากมีการใช้งานและได้ผลลัพธ์ต่างจากที่ต้องการจะได้ไม่สับสน และควรหลีกเลี่ยงการใช้อักขระเหล่านี้ในชื่อแฟ้ม เนื่องจากจะ ทำให้การอ้างถึงชื่อแฟ้มในบรรทัดคำสั่งทำได้ยาก & ; | * ? ' " back quote [ ] ( ) $ < > { } # / \ ! ~ และถึงแม้ว่า Return (Enter) วรรค (space) และ Tab จะไม่ได้อยู่ในกลุ่มอักขระพิเศษ แต่ก้เป็นอักขระที่มีความหมายพิเศษสำหรับ shell กล่าวคือ Return หรือ Enter ใช้(เป็นรหัส)ปิดท้ายบรรทัดคำสั่ง เพื่อให้ shell เริ่มทำงานตามบรรทัดคำสั่งนั้น วรรค และ Tab ใช้สำหรับแยก องค์ประกอบแต่ละส่วนในบรรทัดคำสั่งออกจากกัน อักขระทั้งสองนี้รวมเรียกว่า white space หรือ blank ------------------------------------------------------------------------------------------------ อักขะที่กำหนดเป็น white space ในภาษา C มี 6 ตัวคือ วรรค space 20 0010 0000 Tab horizontal tab '\t' 09 0000 1001 Vertical tab '\v' 0A 0000 1010 ขึ้นบรรทัดใหม่ newline '\n' 0B 0000 1011 ขึ้นหน้าใหม่ form-feed '\f' 0C 0000 1100 ต้นบรรทัด carriage return '\r' 0D 0000 1101 ฟังก์ชัน isspace() ใน ใช้สำหรับทดสอบว่าอักขระที่สนใจอยู่ในกลุ่มนี้หรือไม่? white space ในบรรทัดคำสั่งของ Unix มีเพียง 2 ตัวคือ space และ tab white space ในภาษา C มี 6 ตัว --> white space ของ Unix เป็นเซตย่อยของ white space ในภาษา C -------------------------------------------------------------------------------------------------- ในกรณีที่มีความจำเป็นต้องใช้อักขระพิเศษเหล่านี้ในฐานะเป็นอักขระ "ธรรมดา" ผู้ใช้ต้อง quote หรือ escape (กำกับด้วยสัญลักษณ์) เพื่อ เป็นการแจ้งต่อ shell ว่าต้องการใช้อักขระนั้นในฐานะอักขระธรรมดา อย่างไรก็ดี เครืองหมาย slash (/ - เส้นแบ่ง-ทับ?) มีความหมายเป็นตัว แบ่งในเส้นทางไปยังแฟ้มเสมอ ไม่ว่าจะ quote อย่างไร การ quote หรือ escape ทำได้โดยการใช้เครื่องหมาย backslash (\) นำหน้าอักขระนั้น ในกรณีที่ต้องการ quote อักขระพิเศษ 2 ตัวที่อยู่ ติดกัน ต้องใช้ backslash นำหน้าอักขระพิเศษแต่ละตัว เช่น ต้องการใช้ ** ในฐานะเป็นอักขระธรรมดา ต้องกำหนดเป็น \*\* และในกรณี ที่ต้องการใช้ backslash เป็นอักขระธรรมดา ต้อง quote ด้วย backslash เป็น \\ เนื่องจาก backslash มีผลเฉพาะอักขระพิเสษเพียงตัวเดียว ในกรณีที่มีอักขระพิเศษหลายตัวหรือมีอักขระพิเศษปะปนอยู่กับอักขระธรรมดา สามารถใช้เครื่องหมายคำพูดเดี่ยว (single quote) กำกับได้ เช่น '**' หรือ 'special character:>' ในตัวอย่างหลังนี้ shell จะมองเห็นอักขระ ทุกตัวในเครื่องหมาย single quote เป็นอักขระธรรมดา (Literal string) ทั้งหมด --> Point-to-Ponder ---------------------- ภาษา C สันนิษฐานว่าอักขระที่ผู้เขียนโปรแกรมใช้เป็นอักขระธรรมดา เมื่อต้องการใช้อักขระใดเป็นพิเศษจึงใช้ backslash นำหน้าอักขระ นั้น เช่น ต้องการใช้อักขระ n แทน newline แทนด้วย '\n' เรียกว่า escape sequence escape sequence เป็นกลุ่มของตัวอักขระที่ใช้ในการเปลี่ยนภาวะการทำงานของคอมพิวเตอร์หรืออุปกรณ์รอบข้าง (peripheral device) จึงมีชื่อเรียกอีกอย่างหนึ่งว่า control sequence โดยใช้อักขระที่กำหนดให้เป็น escape character นำหน้าอักขระธรรมดาเพื่อใช้งานเป็น อักขระควบคุมการทำงาน หรือเปลี่ยนภาวะของตัวอักขระนั้นจาก "ข้อมูล" เป็น "คำสั่ง" เช่น ภาษา C กำหนดให้ backslash เป็น escape character และ '\n' เป็น escape sequence สำหรับควบคุมการขึ้นบรรทัดใหม่ของอุปกรณ์แสดงผล เนื่องจาก Shell มีหน้าที่รับ ตีความ และดำเนินการตามคำสั่ง ซึ่งจำเป็นต้องใช้งานอักขระพิเศษประกอบการทำงาน จึงกำหนดให้อักขระ พิเศษ หรือ "คำสั่ง" อยู่ในรูปแบบอักขระปกติ และใช้การ quote เมื่อต้องการใช้เป้น "ข้อมูล" Wildcards in Filenames -------------------------- คำสั่งส่วนใหญ่ของระบบปฏิบัติการ Unix อนุญาตให้ใช้ wildcard ได้ -- คุณลักษณะของ shell ? อักขระใดๆ จำนวนหนึงตัว ยกเว้นเครื่องหมายจุดที่ใช้เป็นอักขระตัวแรกของแฟ้มซ่อน * อักขระตั้งแต่ 0 ตัวหรือมากกว่า (zero or more) ยกเว้นเครื่องหมายจุดที่ใช้เป็นอักขระตัวแรกของแฟ้มซ่อน [] กำหนดกลุ่มของอักขระ (class of characters) ภายในกลุ่มใช้ - ในการกำหนดพิสัย และ ^ ในการแยกกลุ่มอักขระนั้นออกไป ตัวอย่าง [abc]?? ชื่อแฟ้มที่ประกอบด้วยอักขระ 3 ตัว ตัวแรกเป็น a หรือ b หรือ c ตัวใดตัวหนึ่ง อีกสองตัวเป็นอักขระก็ได้ [1-9][A-Z] ชื่อแฟ้มที่ประกอบด้วยอักขระ 2 ตัว ตัวแรกเป็นตัวเลขระหว่าง 1-9 ตัวที่สองเป็นอักษรตัวใหญ่ [^A-Z]?? ชื่อแฟ้มที่ประกอบด้วยอักขระ 3 ตัว อักขระตัวแรกต้องไม่ใช่อักษรตัวใหญ่ *e[0-9]f ชื่อแฟ้มที่ลงท้ายด้วยอักษร 'e', ตัวเลขในช่วง 0-9 จำนวน 1 ตัว และอักษร 'f' หมายเหตุ ใน Borne Again Shell รุ่นใหม่ สามารถใช้เครื่องหมาย ! แทน ^ ได้