Panduan Pemula Untuk BASH - Syarat Dan Pembolehubah

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:

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 / bash
rsstail -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 masukan dan perkataan "verbose" sepadan dengan garisan antara waktu itu 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 pernyataan yang lain . 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 menjalankan sh rssget.sh semua maka anda mendapat penerangan, pautan dan tajuk. Jika sebaliknya anda hanya menjalankan deskripsi sh rssget.sh anda 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;
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

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
fi
fi

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 jika [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] memeriksa sama ada parameter 2 sama dengan "aboutdotcom" atau "lxer". Jika tidak maka kenyataan IF itu lengkap kerana tidak ada pernyataan yang lain untuk yang paling luar JIKA.

Begitu juga pada baris 4 baris jika [$ 1 = "semua"] || [$ 1 = "keterangan"] || [$ 1 = "tajuk"] memeriksa sama ada parameter 1 sama dengan sama ada "semua" atau "penerangan" atau "tajuk".

Sekarang jika pengguna menjalankan sh rssget.sh kentang keju tidak ada yang dikembalikan sedangkan sebelum mereka akan menerima senarai judul 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 2]
kemudian

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
fi
fi

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 2]
kemudian
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
;;
esac
fi

Kenyataan kes adalah cara menulis yang lebih baik JIKA JIKA JIKA JIKA JIKA JIKA JIKA.

Contohnya logik ini

JIKA buah = pisang
THEN ini
LAIN JIKA buah = oranges
THEN ini
LAIN JIKA buah = buah anggur
THEN ini
END 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 2]
kemudian
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;
;;
esac
rsstail $ 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 2]
kemudian
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.

Ringkasan

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.

Semak bahagian Bagaimana untuk (Tinjau ke bawah kategori untuk melihat senarai artikel) dalam inux.about.com l untuk mencari panduan yang lebih berguna dari Windows dan Ubuntu yang menggunakan dual booting untuk menyediakan mesin maya menggunakan kotak GNOME .