Pengenalan
Selamat datang ke bahagian ketiga "Panduan Pemula Untuk BASH". Jika anda telah melepaskan dua artikel sebelumnya maka anda mungkin ingin tahu apa yang menjadikan panduan ini berbeza dengan panduan skrip BASH yang lain.
Panduan ini sedang ditulis oleh pemula lengkap untuk BASH dan sebagainya sebagai pembaca yang anda pelajari semasa saya belajar. Walaupun saya seorang pemula kepada BASH saya datang dari latar belakang pembangunan perisian walaupun kebanyakan perkara yang saya tulis telah dibuat untuk platform Windows.
Anda boleh melihat dua panduan pertama dengan melawat:
- Panduan Pemula Untuk BASH - Hello World
- Panduan Pemula Untuk BASH - Parameter Input
Jika anda baru untuk skrip BASH saya cadangkan membaca dua panduan pertama sebelum meneruskan dengan yang ini.
Dalam panduan ini saya akan menonjolkan bagaimana menggunakan pernyataan bersyarat untuk menguji input pengguna dan untuk mengawal bagaimana fungsi skrip.
Pasang rsstail
Untuk mengikuti panduan ini, anda perlu memasang aplikasi arahan yang dipanggil rsstail yang digunakan untuk membaca suapan RSS.
Sekiranya anda menggunakan jenis pengagihan Debian / Ubuntu / Mint yang berikut:
sudo apt-get install rsstail
Untuk Fedora / CentOS dan taipkan yang berikut:
yum install rsstail
Untuk membuka jenis openSUSE berikut:
zypper install rsstail
Kenyataan JIKA
Buka terminal dan buat fail bernama rssget.sh dengan menaip yang berikut:
sudo nano rssget.sh
Dalam editor nano masukkan teks berikut:
#! / bin / bashrsstail -u http://z.about.com/6/o/m/linux_p2.xml;
Simpan fail dengan menekan CTRL dan O dan kemudian keluar dengan menekan CTRL dan X.
Jalankan skrip dengan menaip yang berikut:
sh rssget.sh
Skrip akan mengembalikan senarai tajuk dari linux.about.com RSS feed.
Ia bukan skrip yang terlalu berguna kerana ia hanya mengambil tajuk dari satu suapan RSS tetapi ia tidak perlu mengingati laluan ke suapan RSS.about.com RSS.
Buka skrip rssget.sh di nano sekali lagi dan edit fail untuk kelihatan seperti berikut:
#! / bin / bash
jika $ 1 = "verbose"kemudian rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;fi
Jalankan skrip sekali lagi dengan menaip yang berikut:
sh rssget.sh verbose
Kali ini suapan RSS kembali dengan tajuk, pautan dan perihalan.
Mari analisis skrip dengan sedikit detail:
#! / Bin / bash muncul dalam setiap skrip yang kami tulis. Baris seterusnya pada asasnya melihat parameter input pertama yang disediakan oleh pengguna dan membandingkannya dengan perkataan "verbose". Jika parameter input dan perkataan "verbose" sepadan dengan garis antara kemudian dan fi berlari.
Skrip di atas jelasnya cacat. Apa yang berlaku jika anda tidak memberikan parameter input sama sekali? Jawapannya ialah anda mendapat ralat di sepanjang baris pengendali yang tidak dijangka.
Kecacatan utama yang lain adalah bahawa jika anda tidak memberikan perkataan "verbose" maka tidak ada yang berlaku sama sekali. Sebaik-baiknya jika anda tidak memberikan perkataan verbose skrip itu akan mengembalikan senarai tajuk.
Gunakan nano sekali lagi untuk mengedit fail rssget.sh dan ubah kod seperti berikut:
#! / bin / bash
jika $ 1 = "verbose"kemudian rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;lain rsstail -u http://z.about.com/6/o/m/linux_p2.xml;fi
Simpan fail dan jalankannya dengan menaip yang berikut:
sh rssget.sh verbose
Senarai tajuk, penerangan dan pautan akan muncul. Sekarang jalankan lagi seperti berikut:
tajuk sh rssget.sh
Kali ini hanya senarai tajuk yang muncul.
Bahagian tambahan skrip adalah pada baris 4 dan memperkenalkan lain pernyataan. Pada dasarnya skrip sekarang mengatakan jika parameter pertama adalah perkataan "verbose" mendapatkan deskripsi, pautan dan tajuk untuk suapan RSS tetapi jika parameter pertama adalah apa-apa sahaja hanya mendapatkan senarai tajuk.
Skrip telah bertambah sedikit tetapi masih cacat. Jika anda gagal memasukkan parameter, anda masih akan mendapat ralat. Walaupun anda menyediakan parameter, hanya dengan mengatakan anda tidak mahu kata-kata kasar tidak bermakna anda mahu tajuk sahaja. Anda mungkin telah mengeja salah kata salah contohnya atau anda mungkin telah menaip merpati yang tentunya tidak bermakna.
Sebelum kita mencuba dan mengosongkan isu-isu ini, saya ingin menunjukkan kepada anda satu lagi arahan yang berlaku dengan kenyataan JIKA.
Edit skrip rssget.sh anda untuk melihat seperti berikut:
#! / bin / bash
jika $ 1 = "semua"kemudian rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;elif $ 1 = "keterangan"kemudian rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;
lain rsstail -u http://z.about.com/6/o/m/linux_p2.xml;fi
Saya memutuskan untuk menyingkirkan kata verbose dan menggantikannya dengan semua. Itu bukan bahagian penting. Skrip di atas memperkenalkan elif yang merupakan cara ringkas untuk mengatakan ELSE IF.
Sekarang skrip berfungsi seperti berikut. Jika anda berlari sh rssget.sh semua maka anda mendapat deskripsi, pautan dan tajuk. Jika sebaliknya anda hanya berlari sh perihal rssget.shanda hanya akan mendapat tajuk dan deskripsi. Jika anda membekalkan apa-apa perkataan lain, anda akan mendapat senarai tajuk.
Ini memperkenalkan cara dengan cepat menyertakan senarai penyataan bersyarat. Cara alternatif untuk melakukan ELIF adalah menggunakan apa yang dikenali sebagai kenyataan JIKA bersarang.
Berikut adalah contoh yang menunjukkan bagaimana pernyataan IF bersarang berfungsi:
#! / bin / bash
jika $ 2 = "aboutdotcom"kemudian jika $ 1 = "semua" kemudian rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml; elif $ 1 = "keterangan" kemudian rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;
lain rsstail -u http://z.about.com/6/o/m/linux_p2.xml; filain jika $ 1 = "semua" kemudian rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss elif $ 1 = "keterangan" kemudian rsstail -d -u http://lxer.com/module/newswire/headlines.rss lain rsstail -u http://z.about.com/6/o/m/linux_p2.xml; fifi
Jangan ragu untuk menaip semua yang ada dalam jika anda suka atau salin dan tampal ke fail rssget.sh anda.
Skrip di atas memperkenalkan parameter ke-2 yang membolehkan anda memilih "about.com" atau "lxer.com" sebagai suapan RSS.
Untuk menjalankannya anda taipkan yang berikut:
sh rssget.sh semua aboutdotcom
atau
sh rssget.sh semua lxer
Anda boleh menggantikan semua dengan deskripsi atau tajuk untuk memberikan hanya deskripsi atau tajuk sahaja.
Pada asasnya kod di atas menyatakan jika parameter kedua adalah tentang aboutdotcom kemudian melihat pernyataan kedua jika yang sama dari skrip sebelumnya yang lain jika parameter kedua adalah lxer kemudian melihat bahagian dalam jika pernyataan lagi untuk memutuskan sama ada untuk menunjukkan tajuk, huraian atau segala-galanya.
Skrip itu disediakan semata-mata sebagai contoh pernyataan tersarang dan ada banyak perkara yang salah dengan skrip itu yang akan mengambil artikel lain untuk menjelaskan semuanya. Isu utama adalah bahawa ia tidak berskala.
Bayangkan anda mahu menambah suapan RSS lain seperti Pengguna Linux Setiap Hari atau Hari Linux? Skrip akan menjadi besar dan jika anda memutuskan bahawa anda mahu kenyataan JIKA dalaman berubah, anda perlu mengubahnya di beberapa tempat.
Walaupun ada masa dan tempat untuk JIKA bersarang mereka harus digunakan dengan berhati-hati. Biasanya ada cara untuk refactor kod anda supaya anda tidak perlu JIKA bersarang sama sekali. Saya akan meneruskan perkara ini dalam artikel masa depan.
Sekarang mari kita lihat menetapkan masalah orang yang memasuki parameter duff. Sebagai contoh dalam skrip di atas jika pengguna memasuki sesuatu selain "aboutdotcom" sebagai parameter ke-2 maka senarai artikel muncul dari suapan RSS dari LXER tanpa mengira sama ada pengguna memasukkan lxer atau tidak.
Di samping itu jika pengguna tidak memasukkan "semua" atau "keterangan" sebagai parameter 1 maka lalai adalah senarai tajuk yang mungkin atau tidak apa yang dimaksudkan oleh pengguna.
Lihat skrip berikut (atau salin dan tampalkannya ke dalam fail rssget.sh anda.
#! / bin / bash
jika $ 2 = "aboutdotcom" || $ 2 = "lxer"kemudian jika $ 1 = "semua" || $ 1 = "keterangan" || $ 1 = "tajuk" kemudian jika $ 2 = "aboutdotcom" kemudian jika $ 1 = "semua" kemudian rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml; elif $ 1 = "keterangan" kemudian rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;
lain rsstail -u http://z.about.com/6/o/m/linux_p2.xml; fi lain jika $ 1 = "semua" kemudian rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss elif $ 1 = "keterangan" kemudian rsstail -d -u http://lxer.com/module/newswire/headlines.rss lain rsstail -u http://z.about.com/6/o/m/linux_p2.xml; fi fi fifi
Perkara pertama yang perlu diperhatikan ialah skrip kini semakin besar dan anda dapat melihat dengan cepat bagaimana kawalan terkawal yang berlaku JIKA boleh menjadi kenyataan.
Bit yang penting dalam skrip ini ialah pernyataan IF || pernyataan BAHAWA seksyen pada baris 2 dan baris 4.
The || bermaksud OR. Jadi barisan itujika $ 2 = "aboutdotcom" || $ 2 = "lxer"memeriksa apakah parameter ke-2 sama dengan "aboutdotcom" atau "lxer". Jika tidak maka kenyataan JIK sudah lengkap kerana tidak ada lain pernyataan untuk yang paling luar JIKA.
Begitu juga pada garisan 4 garisan jika $ 1 = "semua" || $ 1 = "keterangan" || $ 1 = "tajuk"memeriksa apakah parameter 1 sama dengan "semua" atau "deskripsi" atau "tajuk".
Kini jika pengguna berjalansh rssget.sh kentang kejutiada apa-apa dikembalikan sekiranya sebelum mereka akan menerima senarai tajuk dari LXER.
Sebaliknya || adalah & &. Pengendali && bermaksud AND.
Saya akan membuat skrip kelihatan lebih seperti mimpi ngeri tetapi ia membuat pemeriksaan penting untuk memastikan pengguna menyediakan 2 parameter.
#! / bin / bash
jika $ # -eq 2kemudian
jika $ 2 = "aboutdotcom" || $ 2 = "lxer" kemudian jika $ 1 = "semua" || $ 1 = "keterangan" || $ 1 = "tajuk" kemudian jika $ 2 = "aboutdotcom" kemudian jika $ 1 = "semua" kemudian rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml; elif $ 1 = "keterangan" kemudian rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;
lain rsstail -u http://z.about.com/6/o/m/linux_p2.xml; fi lain jika $ 1 = "semua" kemudian rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss elif $ 1 = "keterangan" kemudian rsstail -d -u http://lxer.com/module/newswire/headlines.rss lain rsstail -u http://z.about.com/6/o/m/linux_p2.xml; fi fi fi fifi
Satu-satunya bit yang tambahan dalam skrip itu adalah satu lagi kenyataan JIKA luar seperti berikut:jika $ # -eq 2. Sekiranya anda membaca artikel mengenai parameter input, anda akan tahu bahawa $ # mengembalikan jumlah bilangan parameter input. The -eq bermaksud sama. Oleh itu pernyataan IF memeriksa bahawa pengguna memasuki 2 parameter dan jika mereka tidak hanya keluar tanpa melakukan apa-apa. (Tidak mesra terutamanya).
Saya sedar bahawa tutorial ini semakin besar. Tidak banyak lagi yang boleh diliputi minggu ini tetapi saya mahu membantu merapikan skrip sebelum kita selesai.
Perintah terakhir yang perlu anda pelajari mengenai kenyataan bersyarat adalah penyata KESAN.
#! / bin / bash
jika $ # -eq 2kemudian kes $ 2 dalam aboutdotcom) kes $ 1 dalam semua) rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml ;; keterangan) rsstail -d -u z.about.com/6/o/m/linux_p2.xml ;; tajuk) rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml ;; esac ;; lxer) kes $ 1 dalam semua) rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss ;; keterangan) rsstail -d -u http://lxer.com/module/newswire/headlines.rss ;; tajuk) rsstail -u http://lxer.com/module/newswire/headlines.rss ;; esac ;; esacfi
Kenyataan kes adalah cara menulis yang lebih baik JIKA JIKA JIKA JIKA JIKA JIKA JIKA. Contohnya logik ini JIKA buah = pisangTHEN iniLAIN JIKA buah = orangesTHEN iniLAIN JIKA buah = buah anggurTHEN iniEND JIKA boleh ditulis semula sebagai: buah kes dalam pisang) melakukan ini ;; oren) melakukan ini ;; anggur) melakukan ini ;;esac Pada dasarnya item pertama selepas kes itu adalah perkara yang anda akan bandingkan (iaitu buah). Kemudian setiap item sebelum kurungan adalah perkara yang anda bandingkan terhadap dan jika ia sepadan dengan garisan sebelum ;; akan berlari. Kenyataan kes ditamatkan dengan reverse esac (yang mana kes ke belakang). Dalam skrip rssget.sh pernyataan kes membuang beberapa sarang yang mengerikan walaupun tidak benar-benar membaikinya. Untuk benar-benar memperbaiki skrip saya perlu memperkenalkan anda kepada pembolehubah. Lihat kod berikut: #! / bin / bash lxer = "lxer.com/module/newswire/headlines.rss"aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"paparan = ""url = "" jika $ # -lt 2 || $ # -gt 2kemudian echo "penggunaan: rssget.sh all | description | title aboutdotcom | lxer"; keluar;fi kes $ 1 dalam semua) paparan = "- d -l -u" ;; keterangan) paparan = "- d -u" ;; tajuk) paparan = "- u" ;;esac kes $ 2 dalam aboutdotcom) url = $ aboutdotcom; ;; lxer) url = $ lxer; ;;esacrsstail $ display $ url; Pembolehubah ditakrifkan dengan memberi nama dan kemudian memberi nilai kepadanya. Dalam contoh di atas, berikut adalah pemboleh ubah pembolehubah: lxer = "lxer.com/module/newswire/headlines.rss"aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"paparan = ""url = "" Skrip ini lebih mudah diurus dengan menggunakan pemboleh ubah. Contohnya setiap parameter dikendalikan secara berasingan dan oleh itu tidak ada pernyataan JIKA bersarang. Pemboleh ubah paparan kini ditetapkan bergantung kepada sama ada anda memilih semua, perihalan atau tajuk dan pemboleh ubah url ditetapkan kepada nilai pemboleh ubah aboutdotcom atau nilai pemboleh ubah lxer bergantung sama ada anda memilih aboutdotcom atau lxer. Perintah rsstail kini hanya perlu menggunakan nilai paparan dan url untuk berjalan dengan betul. Walaupun pembolehubah ditetapkan hanya dengan memberikan nama kepada mereka, untuk benar-benar menggunakannya, anda perlu meletakkan tanda $ di hadapan mereka. Dalam erti kata lain variabel = nilai menetapkan pembolehubah kepada nilai sedangkan variable $ bermakna memberi saya kandungan pembolehubah. Berikut adalah skrip terakhir untuk tutorial ini. #! / bin / bash 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"penggunaan = "penggunaan: rssget.sh all | description | title lxer | aboutdotcom | everydaylinuxuser | linuxtoday"paparan = ""url = "" jika $ # -lt 2 || $ # -gt 2kemudian echo $ usage; keluar;fi kes $ 1 dalam semua) paparan = "- d -l -u" ;; keterangan) paparan = "- d -u" ;; tajuk) paparan = "- u" ;; *) echo $ usage; keluar; ;;esac kes $ 2 dalam aboutdotcom) url = $ aboutdotcom; ;; lxer) url = $ lxer; ;; linuxtoday) url = $ linuxtoday; ;; everydaylinuxuser) url = $ everydaylinuxuser; ;; *) echo $ usage; keluar;esac rsstail $ display $ url; Skrip di atas memperkenalkan lebih banyak suapan RSS dan terdapat pemboleh ubah penggunaan yang memberitahu pengguna bagaimana menggunakan skrip jika mereka sama ada tidak memasukkan 2 pembolehubah atau mereka memasukkan pilihan yang salah untuk pembolehubah. Ini telah menjadi artikel epik dan mungkin terlalu lama tidak lama lagi. Dalam panduan seterusnya saya akan menunjukkan kepada anda semua pilihan perbandingan untuk JIKA kenyataan dan masih banyak lagi yang dibincangkan mengenai pembolehubah. Terdapat juga lebih banyak yang boleh dilakukan untuk memperbaiki skrip di atas dan ini akan dibincangkan dalam panduan masa depan apabila kita meneroka gelung, grep dan ungkapan biasa. Lihat bahagian Cara untuk (Tinjau ke bawah kategori untuk melihat senarai artikel) di linux.about.com untuk mencari panduan yang lebih berguna daripada Windows dan Ubuntu yang menggunakan dua mesin virtual menggunakan kotak GNOME. Ringkasan