shell script for download virtualbox packages Part 2
หลังจาก เกริ่นนำ เสียยืดยาว แต่ ยังไม่เข้าสู่เนื้อหาใน ภาคแรก ก็ขอเอามาต่อภาคสองที่นี่ … ความเดิมตอนที่แล้ว โจทย์มีอยู่ว่า เราต้องการ download package ของ virtualbox ตัวล่าสุด และต้องการไฟล์ package สำหรับ 1. Windows 2. Ubuntu โดยแยกเป็น 2.1 Ubuntu 12.04 — precise pangolin 2.2 Ubuntu 12.10 — quantal quetzal ทั้งสอง revision ต้องการ package สำหรับทั้ง i386 และ amd64 architecture 3. Extension pack 4. User manual 5. ไฟล์ MD5SUMS สำหรับตรวจสอบไฟล์ ที่ download มา โดยไฟล์ทั้งหมดจะเก็บอยู่ใน http://download.virtualbox.org/virtualbox/$version ส่วนของตัวเลข $version นั้นเรามีวิธีการที่จะใช้ script ในการอ่านค่านั้นมาโดยอัตโนมัติเอาไว้แล้ว ใน ตอนแรกของบทความ ชุดนี้ (เรียกซะเป็นชุด แต่จริงๆแล้วก็มีแค่ 2 เท่านั้นแหละครับ) ไฟล์ที่ต้องการจริงๆนั้นมีอะไรบ้าง? 1. Windows http://download.virtualbox.org/virtualbox/4.2.8/VirtualBox-4.2.8-83876-Win.exe 2. Ubuntu 2.1 Ubuntu 12.04 มี 2 file สำหรับ 2 architecture http://download.virtualbox.org/virtualbox/4.2.8/virtualbox-4.2_4.2.8-83876~Ubuntu~precise_amd64.deb http://download.virtualbox.org/virtualbox/4.2.8/virtualbox-4.2_4.2.8-83876~Ubuntu~precise_i386.deb เอาเท่านี้ก่อน … จะเห็นว่า URL ที่จะใช้ในการเข้าถึงไฟล์นั้น จะซับซ้อนพอดู ส่วนแรกที่เหมือนกัน ก็คือ URL ที่ระบุไปถึง directory และ version คือ http://download.virtualbox.org/virtualbox/4.2.8/ จะเหมือนกัน แต่หลังจากนั้น ส่วนของไฟล์จะได้เป็น VirtualBox-4.2.8-83876-Win.exe virtualbox-4.2_4.2.8-83876~Ubuntu~precise_amd64.deb virtualbox-4.2_4.2.8-83876~Ubuntu~precise_i386.deb และไฟล์ของ Ubuntu 12.10 virtualbox-4.2_4.2.8-83876~Ubuntu~quantal_amd64.deb virtualbox-4.2_4.2.8-83877~Ubuntu~quantal_i386.deb นั่นแน่ะ ตัวเลข release เฉพาะของ Ubuntu 12.10 เองก็ยังต่างกัน ระหว่าง amd64 (83876) กับ i386 (83877) อีกต่างหาก ถ้าจะระบุชื่อเองโดยหาข้อมูล version/sub version/release บวกกับ architecture บวกกับการตั้งชื่อที่แตกต่างกัน (ตัวเล็ก/ใหญ่ ของชื่อ VirtualBox ระหว่าง Windows กับ Ubuntu) ก็คงจะได้ script ที่ซับซ้อนน่าดู แต่จริงๆแล้วมีวิธีการที่ง่ายกว่านั้น ก่อนอื่นเรามา list ไฟล์ที่มีอยู่ออกมาดูกันก่อน เราสามารถใช้คำสั่ง wget -q -O- http://download.virtualbox.org/virtualbox/4.2.8/ ก็จะเห็น ข้อมูลของหน้า download อยู่ใน format ของ html มีขยะอะไรที่เราไม่ต้องการเยอะแยะไปหมด เราต้องการเฉพาะบรรทัดที่อ้างถึงไฟล์ที่เราสามารถเอามาใช้ download ได้ ลองสังเกตดู เราก็จะเห็นว่า บรรทัดเหล่านั้นจะเริ่มบรรทัดด้วย ‘<A HREF=’ … งั้นเอาละ เราก็กรองมาเฉพาะบรรทัดเหล่านั้น wget -q -O- http://download.virtualbox.org/virtualbox/4.2.8/ | grep ‘^<A HREF’ สวยงามขึ้น … แต่เราต้องการเฉพาะชื่อไฟล์ ไม่ได้ต้องการ html format ทั้งบรรทัด ในกรณีนี้ ส่วนที่เราต้องการอยู่ระหว่างเครื่องหมาย double qoute (“) คู่แรก ซึ่งเราใช้คำสั่ง cut ช่วยแยกสิ่งที่เราต้องการออกมาได้ โดยเพิ่มคำสั่งเป็น wget -q