บทนำ
ยินดีต้อนรับสู่ส่วนที่สามของ "คู่มือสำหรับผู้เริ่มต้นใช้งาน BASH" หากคุณพลาดบทความสองข้อก่อนหน้านี้คุณอาจต้องการทราบว่าอะไรทำให้คำแนะนำนี้แตกต่างไปจากคู่มือการเขียนสคริปต์ BASH อื่น ๆ
คู่มือเล่มนี้เขียนขึ้นโดยสามเณรที่สมบูรณ์เพื่อ BASH และเพื่อให้เป็นผู้อ่านที่คุณเรียนรู้ขณะที่ฉันเรียนรู้ ขณะที่ฉันเป็นสามเณรเพื่อ BASH ฉันมาจากพื้นหลังการพัฒนาซอฟต์แวร์แม้ว่าส่วนใหญ่ของสิ่งที่ฉันได้เขียนได้สำหรับแพลตฟอร์ม Windows
คุณสามารถดูคำแนะนำสองคำแรกได้โดยไปที่:
- คู่มือเริ่มต้นใช้งาน BASH - Hello World
- คู่มือเริ่มต้นใช้งานสำหรับ BASH - พารามิเตอร์การป้อนข้อมูล
ถ้าคุณยังใหม่กับสคริปต์ BASH ผมขอแนะนำให้อ่านคู่มือสองตัวแรกก่อนที่จะดำเนินการต่อไป
ในคู่มือนี้ผมจะเน้นวิธีการใช้งบเงื่อนไขเพื่อทดสอบการป้อนข้อมูลของผู้ใช้และเพื่อควบคุมการทำงานของสคริปต์
ติดตั้ง rsstail
ในการปฏิบัติตามคู่มือนี้คุณจะต้องติดตั้งโปรแกรมบรรทัดคำสั่งที่เรียกว่า rsstail ซึ่งใช้อ่านฟีด RSS
หากคุณใช้ Debian / Ubuntu / Mint แบบกระจายตามประเภทดังต่อไปนี้:
sudo apt-get ติดตั้ง rsstail
สำหรับ Fedora / CentOS ฯลฯ ให้พิมพ์ข้อมูลต่อไปนี้:
ติดตั้ง rsstail yum
สำหรับประเภท openSUSE ต่อไปนี้:
zypper ติดตั้ง rsstail
คำสั่ง IF
เปิดเทอร์มินัลและสร้างไฟล์ที่เรียกว่า rssget.sh โดยพิมพ์ข้อความต่อไปนี้:
sudo nano rssget.sh
ภายในโปรแกรมแก้ไข nano ให้ป้อนข้อความต่อไปนี้:
#! / bin / ทุบตีrsstail -u http://z.about.com/6/o/m/linux_p2.xml;
บันทึกไฟล์โดยการกด CTRL และ O แล้วออกโดยการกด CTRL และ X.
เรียกใช้สคริปต์โดยพิมพ์ข้อความต่อไปนี้:
sh rssget.sh
สคริปต์จะแสดงรายการชื่อจากฟีด RSS linux.about.com
ไม่ใช่สคริปต์ที่มีประโยชน์มากเกินไปเพราะดึงชื่อจากฟีด RSS เพียงอย่างเดียว แต่จะช่วยประหยัดเวลาในการจดจำเส้นทางไปยังฟีด RSS ของ Linux.about.com
เปิดสคริปต์ rssget.sh ใน nano อีกครั้งและแก้ไขไฟล์ให้ดูดังนี้:
#! / bin / ทุบตี
ถ้า $ 1 = "verbose"แล้วก็ rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;Fi
เรียกใช้สคริปต์อีกครั้งโดยพิมพ์ข้อความต่อไปนี้:
sh rssget.sh verbose
เวลาฟีด RSS นี้กลับมาพร้อมกับชื่อลิงก์และคำอธิบาย
ลองวิเคราะห์สคริปต์ในรายละเอียด:
#! / bin / bash จะปรากฏในทุกๆสคริปต์ที่เราเขียน บรรทัดถัดไปโดยทั่วไปจะดูที่พารามิเตอร์การป้อนข้อมูลแรกของผู้ใช้และเปรียบเทียบกับคำว่า "verbose" หากพารามิเตอร์การป้อนข้อมูลและคำว่า "verbose" ตรงกับบรรทัดระหว่าง แล้วก็ และ Fi วิ่ง
สคริปต์ข้างต้นเห็นได้ชัดว่ามีข้อบกพร่อง จะเกิดอะไรขึ้นหากคุณไม่มีพารามิเตอร์สำหรับการป้อนข้อมูลเลย คำตอบคือคุณได้รับข้อผิดพลาดตามบรรทัดของตัวดำเนินการที่ไม่คาดคิด
ข้อบกพร่องสำคัญอื่น ๆ ก็คือถ้าคุณไม่ได้ให้คำว่า "verbose" แล้วไม่มีอะไรเกิดขึ้นเลย หากคุณไม่ได้ให้คำว่า verbose สคริปต์จะแสดงรายการชื่อ
ใช้ nano อีกครั้งเพื่อแก้ไขไฟล์ rssget.sh และแก้ไขโค้ดดังต่อไปนี้
#! / bin / ทุบตี
ถ้า $ 1 = "verbose"แล้วก็ rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;อื่น rsstail -u http://z.about.com/6/o/m/linux_p2.xml;Fi
บันทึกไฟล์และเรียกใช้งานโดยพิมพ์ข้อมูลต่อไปนี้:
sh rssget.sh verbose
รายชื่อคำอธิบายและลิงก์จะปรากฏขึ้น ตอนนี้ให้รันอีกครั้งดังนี้:
sh ชื่อ rssget.sh
คราวนี้มีเพียงชื่อรายการเท่านั้น
ส่วนพิเศษของสคริปต์อยู่ในบรรทัดที่ 4 และแนะนำ อื่น คำแถลง โดยทั่วไปสคริปต์ตอนนี้กล่าวว่าถ้าพารามิเตอร์แรกคือคำว่า "verbose" ได้รับรายละเอียดการเชื่อมโยงและชื่อเรื่องสำหรับฟีด RSS แต่ถ้าพารามิเตอร์แรกคืออะไรอื่นเพียงได้รับรายการของชื่อ
สคริปต์มีการปรับปรุงเล็กน้อย แต่ยังคงมีข้อบกพร่อง หากคุณไม่ป้อนพารามิเตอร์คุณจะยังคงได้รับข้อผิดพลาด แม้ว่าคุณจะระบุพารามิเตอร์ด้วยการบอกว่าคุณไม่ต้องการให้คำอธิบายไม่ได้หมายความว่าคุณต้องการแค่ชื่อเท่านั้น คุณอาจสะกดคำผิดอย่างไม่ถูกต้องเช่นหรือคุณอาจจะพิมพ์นกพิราบซึ่งแน่นอนไม่มีความหมาย
ก่อนที่เราจะพยายามล้างปัญหาเหล่านี้ฉันต้องการแสดงคำสั่งเพิ่มเติมที่จะไปกับคำสั่ง IF
แก้ไขสคริปต์ rssget.sh ของคุณให้มีลักษณะดังนี้:
#! / bin / ทุบตี
ถ้า $ 1 = "ทั้งหมด"แล้วก็ rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;elif $ 1 = "description"แล้วก็ rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;
อื่น rsstail -u http://z.about.com/6/o/m/linux_p2.xml;Fi
ฉันตัดสินใจที่จะกำจัดคำที่อ่านออกมาและแทนที่ด้วยทุกอย่าง นั่นไม่ใช่ส่วนที่สำคัญ สคริปต์ข้างต้นแนะนำ elif ซึ่งเป็นวิธีสั้น ๆ ในการพูดว่า IF อื่น
ขณะนี้สคริปต์ทำงานดังนี้ ถ้าคุณเรียกใช้ sh rssget.sh ทั้งหมด แล้วคุณจะได้คำอธิบายลิงก์และชื่อ ถ้าคุณเพียงแค่เรียกใช้ ดวลจุดโทษ รายละเอียด rssget.shคุณก็จะได้รับชื่อและคำอธิบาย หากคุณจัดหาคำอื่นใดคุณจะได้รับรายชื่อ
นี้แนะนำวิธีการได้อย่างรวดเร็วขึ้นมาพร้อมกับรายการของงบเงื่อนไข วิธีอื่นในการทำ ELIF คือการใช้สิ่งที่เรียกว่างบ IF ที่ซ้อนกัน
ต่อไปนี้เป็นตัวอย่างที่แสดงวิธีการทำงานของงบ IF ที่ซ้อนกัน:
#! / bin / ทุบตี
ถ้า $ 2 = "aboutdotcom"แล้วก็ ถ้า $ 1 = "ทั้งหมด" แล้วก็ rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml; elif $ 1 = "description" แล้วก็ rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;
อื่น rsstail -u http://z.about.com/6/o/m/linux_p2.xml; Fiอื่น ถ้า $ 1 = "ทั้งหมด" แล้วก็ rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss elif $ 1 = "description" แล้วก็ rsstail -d -u http://lxer.com/module/newswire/headlines.rss อื่น rsstail -u http://z.about.com/6/o/m/linux_p2.xml; FiFi
รู้สึกฟรีเพื่อพิมพ์ทั้งหมดที่คุณต้องการหรือคัดลอกและวางลงในไฟล์ rssget.sh ของคุณ
สคริปต์ข้างต้นแนะนำพารามิเตอร์ที่ 2 ซึ่งช่วยให้คุณสามารถเลือกฟีด RSS "about.com" หรือ "lxer.com"
เมื่อต้องการเรียกใช้คุณพิมพ์ต่อไปนี้:
sh rssget.sh ทั้งหมด aboutdotcom
หรือ
sh rssget.sh ทั้งหมด lxer
คุณสามารถแทนที่ทั้งหมดด้วยคำอธิบายหรือชื่อเพื่อให้คำอธิบายหรือแค่ชื่อเท่านั้น
โดยทั่วไปรหัสข้างต้นกล่าวว่าถ้าพารามิเตอร์ที่สองคือ aboutdotcom แล้วดูที่คำสั่งที่สองถ้าเป็นหนึ่งเดียวกันจากสคริปต์ก่อนหน้าอื่นถ้าพารามิเตอร์ที่สอง lxer แล้วมองไปที่ด้านในหากคำสั่งอีกครั้งเพื่อตัดสินใจว่าจะแสดงชื่อคำอธิบาย หรือทุกอย่าง
สคริปต์ดังกล่าวจัดทำเป็นตัวอย่างของคำสั่ง IF ที่ซ้อนกันและมีหลายสิ่งที่ผิดพลาดกับสคริปต์ที่จะนำบทความอื่นไปอธิบายให้พวกเขาทั้งหมด ปัญหาหลักคือไม่สามารถปรับขนาดได้
ลองจินตนาการว่าคุณต้องการเพิ่มฟีด RSS เช่น Everyday Linux User หรือ Linux Today? สคริปต์จะกลายเป็นเรื่องใหญ่และหากคุณตัดสินใจว่าต้องการเปลี่ยนคำสั่ง IF ภายในคุณจะต้องเปลี่ยนในหลาย ๆ ที่
ขณะที่มีเวลาและสถานที่สำหรับซ้อนกันถ้าพวกเขาควรจะใช้เท่าที่จำเป็น โดยปกติจะมีวิธี refactor code ของคุณเพื่อที่คุณจะได้ไม่จำเป็นต้องใช้ IF ที่ซ้อนกัน ฉันจะมาถึงเรื่องนี้ในบทความในอนาคต
ตอนนี้เรามาดูการแก้ไขปัญหาของผู้ที่เข้าสู่พารามิเตอร์ duff แล้ว ตัวอย่างเช่นในสคริปต์ข้างต้นหากผู้ใช้ป้อนสิ่งอื่นที่ไม่ใช่ "aboutdotcom" เป็นพารามิเตอร์ที่ 2 รายการบทความจะปรากฏจากฟีด RSS จาก LXER โดยไม่คำนึงว่าผู้ใช้ป้อน lxer หรือไม่
นอกจากนี้หากผู้ใช้ไม่ป้อน "ทั้งหมด" หรือ "คำอธิบาย" เป็นพารามิเตอร์ที่ 1 ค่าดีฟอลต์คือรายการของชื่อที่อาจจะเป็นสิ่งที่ผู้ใช้กำหนดไว้
ดูที่สคริปต์ต่อไปนี้ (หรือคัดลอกและวางลงในไฟล์ rssget.sh ของคุณ
#! / bin / ทุบตี
ถ้า $ 2 = "aboutdotcom" || $ 2 = "lxer"แล้วก็ ถ้า $ 1 = "ทั้งหมด" || $ 1 = "description" || $ 1 = "ชื่อ" แล้วก็ ถ้า $ 2 = "aboutdotcom" แล้วก็ ถ้า $ 1 = "ทั้งหมด" แล้วก็ rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml; elif $ 1 = "description" แล้วก็ rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;
อื่น rsstail -u http://z.about.com/6/o/m/linux_p2.xml; Fi อื่น ถ้า $ 1 = "ทั้งหมด" แล้วก็ rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss elif $ 1 = "description" แล้วก็ rsstail -d -u http://lxer.com/module/newswire/headlines.rss อื่น rsstail -u http://z.about.com/6/o/m/linux_p2.xml; Fi Fi FiFi
สิ่งแรกที่ควรทราบก็คือตอนนี้สคริปต์กำลังได้รับค่อนข้างใหญ่และคุณสามารถดูได้ว่าคำสั่ง IF แบบซ้อนกันแบบควบคุมสามารถเป็นได้อย่างไร
บิตที่สำคัญในสคริปต์นี้คือ IF statement || คำสั่ง THEN ส่วนในบรรทัดที่ 2 และบรรทัดที่ 4
|| ย่อมาจาก OR ดังนั้นเส้นถ้า $ 2 = "aboutdotcom" || $ 2 = "lxer"ตรวจสอบว่าพารามิเตอร์ที่ 2 มีค่าเท่ากับ "aboutdotcom" หรือ "lxer" ถ้าไม่ใช่แล้วคำสั่ง IF ก็สมบูรณ์เพราะไม่มี อื่น คำสั่งสำหรับด้านนอกมากที่สุด ถ้า.
ในทำนองเดียวกันในบรรทัดที่ 4 บรรทัด ถ้า $ 1 = "ทั้งหมด" || $ 1 = "description" || $ 1 = "ชื่อ"ตรวจสอบว่าพารามิเตอร์ที่ 1 มีค่าเท่ากับ "ทั้งหมด" หรือ "คำอธิบาย" หรือ "ชื่อ"
ตอนนี้ถ้าผู้ใช้ทำงานsh ชีสมันฝรั่ง rssget.shไม่มีอะไรจะกลับมาในขณะที่ก่อนที่พวกเขาจะได้รับรายชื่อจาก LXER
ตรงข้ามกับ || คือ &&. ตัวดำเนินการ && หมายถึง AND
ฉันจะทำให้สคริปต์ดูมากยิ่งขึ้นเช่นฝันร้าย แต่จะทำให้การตรวจสอบที่สำคัญทั้งหมดเพื่อให้แน่ใจว่าผู้ใช้มีให้ 2 พารามิเตอร์
#! / bin / ทุบตี
ถ้า $ # -eq 2แล้วก็
ถ้า $ 2 = "aboutdotcom" || $ 2 = "lxer" แล้วก็ ถ้า $ 1 = "ทั้งหมด" || $ 1 = "description" || $ 1 = "ชื่อ" แล้วก็ ถ้า $ 2 = "aboutdotcom" แล้วก็ ถ้า $ 1 = "ทั้งหมด" แล้วก็ rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml; elif $ 1 = "description" แล้วก็ rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;
อื่น rsstail -u http://z.about.com/6/o/m/linux_p2.xml; Fi อื่น ถ้า $ 1 = "ทั้งหมด" แล้วก็ rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss elif $ 1 = "description" แล้วก็ rsstail -d -u http://lxer.com/module/newswire/headlines.rss อื่น rsstail -u http://z.about.com/6/o/m/linux_p2.xml; Fi Fi Fi FiFi
บิตเดียวที่เป็นพิเศษในสคริปต์ที่เป็นอีกคำสั่ง IF ด้านนอกเป็นดังนี้:ถ้า $ # -eq 2. ถ้าคุณอ่านบทความเกี่ยวกับพารามิเตอร์การป้อนข้อมูลคุณจะรู้ว่า $ # ส่งกลับจำนวนของพารามิเตอร์อินพุท eq หมายถึงค่าเท่ากับ คำสั่ง IF จะตรวจสอบว่าผู้ใช้ป้อนพารามิเตอร์ 2 พารามิเตอร์และถ้าไม่ได้ทำเพียงแค่ออกโดยไม่ทำอะไร (ไม่เป็นมิตรโดยเฉพาะ)
ฉันทราบดีว่าการกวดวิชานี้มีขนาดค่อนข้างใหญ่ ไม่มีอะไรให้ครอบคลุมมากขึ้นในสัปดาห์นี้ แต่ฉันต้องการช่วยให้เป็นระเบียบเรียบร้อยก่อนที่เราจะจบบท
คำสั่งสุดท้ายที่คุณต้องเรียนรู้เกี่ยวกับงบเงื่อนไขคือคำสั่ง CASE
#! / bin / ทุบตี
ถ้า $ # -eq 2แล้วก็ กรณี $ 2 in aboutdotcom) กรณี $ 1 ใน ทั้งหมด) rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml ;; คำอธิบาย) rsstail -d -u z.about.com/6/o/m/linux_p2.xml ;; หัวข้อ) rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml ;; esac ;; lxer) กรณี $ 1 ใน ทั้งหมด) rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss ;; คำอธิบาย) rsstail -d -u http://lxer.com/module/newswire/headlines.rss ;; หัวข้อ) rsstail -u http://lxer.com/module/newswire/headlines.rss ;; esac ;; esacFi
คำสั่งกรณีเป็นวิธีที่ดีกว่าในการเขียน IF ELSE IF ELSE IF ELSE IF เช่นตรรกะนี้ ถ้าผลไม้ = กล้วยแล้วนี้อื่นถ้าผลไม้ = ส้มแล้วนี้อื่นถ้าผลไม้ = องุ่นแล้วนี้END IF สามารถเขียนใหม่เป็น: กรณีผลไม้เข้า กล้วย) ทำเช่นนี้ ;; ส้ม) ทำเช่นนี้ ;; องุ่น) ทำเช่นนี้ ;;esac โดยทั่วไปเป็นรายการแรกหลังจากกรณีเป็นสิ่งที่คุณจะเปรียบเทียบ (ผลไม้) แล้วแต่ละรายการก่อนวงเล็บคือสิ่งที่คุณกำลังเปรียบเทียบและถ้ามันตรงกับบรรทัดก่อน; จะวิ่ง คำสั่ง case ถูกยกเลิกโดยใช้ reverse esac (ซึ่งเป็นกรณีถอยหลัง) ในสคริปต์ rssget.sh คำสั่ง case จะลบการทำรังที่น่ากลัวบางอย่างออกไปแม้ว่าจะไม่ได้ปรับปรุงให้ดีพอ เพื่อปรับปรุงสคริปต์จริงๆฉันต้องแนะนำคุณกับตัวแปร ดูรหัสต่อไปนี้: #! / bin / ทุบตี lxer = "lxer.com/module/newswire/headlines.rss"aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"การแสดงผล = ""url = "" if $ # -lt 2 || $ # -gt 2แล้วก็ echo "การใช้งาน: rssget.sh ทั้งหมด | คำอธิบาย | ชื่อเรื่อง aboutdotcom | lxer"; ทางออก;Fi กรณี $ 1 ใน ทั้งหมด) display = "- d -l -u" ;; คำอธิบาย) display = "- d -u" ;; หัวข้อ) การแสดงผล = "- ยู" ;;esac กรณี $ 2 in aboutdotcom) url = $ aboutdotcom; ;; lxer) url = $ lxer; ;;esacrsstail $ display $ url; ตัวแปรถูกกำหนดโดยระบุชื่อและกำหนดค่าให้กับมัน ในตัวอย่างข้างต้นสิ่งต่อไปนี้คือการกำหนดตัวแปร: lxer = "lxer.com/module/newswire/headlines.rss"aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"การแสดงผล = ""url = "" สคริปต์สามารถจัดการได้ง่ายขึ้นโดยใช้ตัวแปร ตัวอย่างเช่นพารามิเตอร์แต่ละตัวถูกจัดการแยกกันและไม่มีงบ IF ที่ซ้อนกันอยู่ ตัวแปรการแสดงผลถูกตั้งค่าแล้วแต่ว่าคุณเลือกทั้งหมดคำอธิบายหรือชื่อเรื่องและตัวแปร url ถูกตั้งค่าเป็นค่าของตัวแปร aboutdotcom หรือค่าของตัวแปร lxer ขึ้นอยู่กับว่าคุณเลือก aboutdotcom หรือ lxer หรือไม่ คำสั่ง rsstail ตอนนี้ต้องใช้ค่าของ display และ url เพื่อให้รันอย่างถูกต้อง ขณะที่ตัวแปรมีการตั้งค่าเพียงแค่ระบุชื่อให้ใช้จริงคุณจะต้องวางเครื่องหมาย $ ในหน้า กล่าวอีกนัยหนึ่งตัวแปร = ค่ากำหนดตัวแปรให้เป็นค่าในขณะที่ตัวแปร $ หมายถึงให้เนื้อหาของตัวแปร ต่อไปนี้เป็นสคริปต์ขั้นสุดท้ายสำหรับบทแนะนำนี้ #! / bin / ทุบตี lxer = "lxer.com/module/newswire/headlines.rss"aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"everydaylinuxuser = "http://feeds.feedburner.com/everydaylinuxuser/WLlg"linuxtoday = "http://feedproxy.google.com/linuxtoday/linux"การใช้ = "การใช้งาน: rssget.sh ทั้งหมด | คำอธิบาย | ชื่อเรื่อง lxer | aboutdotcom | everydaylinuxuser | linuxtoday"การแสดงผล = ""url = "" if $ # -lt 2 || $ # -gt 2แล้วก็ echo $ การใช้; ทางออก;Fi กรณี $ 1 ใน ทั้งหมด) display = "- d -l -u" ;; คำอธิบาย) display = "- d -u" ;; หัวข้อ) การแสดงผล = "- ยู" ;; *) echo $ การใช้; ทางออก; ;;esac กรณี $ 2 in aboutdotcom) url = $ aboutdotcom; ;; lxer) url = $ lxer; ;; linuxtoday) url = $ linuxtoday; ;; everydaylinuxuser) url = $ everydaylinuxuser; ;; *) echo $ การใช้; ทางออก;esac rsstail $ display $ url; สคริปต์ข้างต้นแนะนำฟีด RSS เพิ่มเติมและมีตัวแปรการใช้งานซึ่งบอกให้ผู้ใช้ทราบว่าจะใช้สคริปต์อย่างไรหากไม่ป้อนตัวแปร 2 ตัวแปรหรือป้อนตัวเลือกไม่ถูกต้องสำหรับตัวแปร นี่เป็นบทความมหากาพย์และอาจจะไปไกลเกินไป ในคู่มือถัดไปฉันจะแสดงตัวเลือกการเปรียบเทียบทั้งหมดสำหรับคำชี้แจง IF และยังมีอีกหลายเรื่องที่จะพูดถึงเกี่ยวกับตัวแปรต่างๆ นอกจากนี้ยังมีอีกหลายสิ่งที่สามารถทำได้เพื่อปรับปรุงสคริปต์ข้างต้นและจะครอบคลุมในคำแนะนำในอนาคตเมื่อเราสำรวจลูป grep และนิพจน์ทั่วไป ตรวจสอบวิธีการ (เลื่อนลงมาที่หมวดหมู่เพื่อดูรายการบทความ) ของ linux.about.com เพื่อค้นหาคำแนะนำที่เป็นประโยชน์จาก Windows dual booting และ Ubuntu เพื่อตั้งค่าเครื่องเสมือนโดยใช้กล่อง GNOME สรุป