Skip to main content

Pemula Panduan Untuk Bash - Kondisi Dan Variabel

Mengenal Tcon LCD dan Gejala Kerusakannya (Juli 2025)

Mengenal Tcon LCD dan Gejala Kerusakannya (Juli 2025)
Anonim

pengantar

Selamat datang di bagian ketiga "Panduan Pemula untuk BASH". Jika Anda melewatkan dua artikel sebelumnya maka Anda mungkin akan ingin tahu apa yang membuat panduan ini berbeda dengan panduan scripting BASH lainnya.

Panduan ini ditulis oleh seorang pemula yang lengkap untuk BASH dan sebagai pembaca yang Anda pelajari sewaktu saya belajar. Sementara saya seorang pemula untuk BASH saya berasal dari latar belakang pengembangan perangkat lunak meskipun sebagian besar hal yang saya tulis telah untuk platform Windows.

Anda dapat melihat dua panduan pertama dengan mengunjungi:

  • Panduan untuk Pemula BASH - Hello World
  • Panduan Pemula Untuk BASH - Parameter Input

Jika Anda baru untuk BASH scripting, saya sarankan membaca dua panduan pertama sebelum melanjutkan dengan yang satu ini.

Dalam panduan ini, saya akan menyoroti cara menggunakan pernyataan bersyarat untuk menguji masukan pengguna dan untuk mengontrol cara kerja skrip.

Instal rsstail

Untuk mengikuti panduan ini, Anda perlu menginstal aplikasi baris perintah bernama rsstail yang digunakan untuk membaca umpan RSS.

Jika Anda menggunakan jenis distribusi berbasis Debian / Ubuntu / Mint berikut ini:

sudo apt-get install rsstail

Untuk Fedora / CentOS dll, ketik yang berikut:

yum instal rsstail

Untuk tipe openSUSE berikut ini:

zypper install rsstail

Pernyataan IF

Buka terminal dan buat file bernama rssget.sh dengan mengetik yang berikut:

sudo nano rssget.sh

Di dalam editor nano, masukkan teks berikut:

#! / bin / bashrsstail -u http://z.about.com/6/o/m/linux_p2.xml;

Simpan file dengan menekan CTRL dan O lalu keluar dengan menekan CTRL dan X.

Jalankan skrip dengan mengetik yang berikut:

sh rssget.sh

Skrip akan mengembalikan daftar judul dari umpan RSS linux.about.com.

Ini bukan skrip yang terlalu berguna karena hanya mengambil judul dari satu umpan RSS tetapi menyimpannya harus mengingat jalur ke umpan RSS Linux.about.com.

Buka skrip rssget.sh di nano lagi dan edit file untuk terlihat seperti berikut:

#! / bin / bash

jika $ 1 = "verbose"kemudian rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;fi

Jalankan skripnya lagi dengan mengetik yang berikut:

sh rssget.sh verbose

Kali ini umpan RSS datang kembali dengan judul, tautan, dan deskripsi.

Mari kita analisis skripnya dengan sedikit detail:

The #! / Bin / bash muncul di setiap skrip yang kami tulis. Baris berikutnya pada dasarnya melihat pada parameter masukan pertama yang disediakan oleh pengguna dan membandingkannya dengan kata "verbose". Jika parameter input dan kata "verbose" cocok dengan garis di antara keduanya kemudian dan fi berlari.

Naskah di atas jelas cacat. Apa yang terjadi jika Anda tidak memberikan parameter input sama sekali? Jawabannya adalah Anda mendapatkan kesalahan di sepanjang garis operator yang tidak diharapkan.

Kelemahan utama lainnya adalah jika Anda tidak memberikan kata "verbose" maka tidak ada yang terjadi sama sekali. Idealnya jika Anda tidak memberikan kata secara lengkap, skrip akan mengembalikan daftar judul.

Gunakan nano lagi untuk mengedit file rssget.sh dan mengubah kode sebagai 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 file dan jalankan dengan mengetik yang berikut:

sh rssget.sh verbose

Daftar judul, deskripsi, dan tautan akan muncul. Sekarang jalankan lagi sebagai berikut:

judul sh rssget.sh

Kali ini hanya daftar judul yang muncul.

Bagian tambahan dari naskah ini ada di baris 4 dan memperkenalkan lain pernyataan. Pada dasarnya skrip sekarang mengatakan jika parameter pertama adalah kata "verbose", dapatkan deskripsi, tautan dan judul untuk umpan RSS tetapi jika parameter pertama adalah hal lain, dapatkan daftar judul.

Skrip telah sedikit membaik tetapi masih cacat. Jika Anda gagal memasukkan parameter, Anda masih akan mendapatkan kesalahan. Bahkan jika Anda memberikan parameter, hanya dengan mengatakan Anda tidak ingin verbose bukan berarti Anda hanya menginginkan judul. Anda mungkin baru saja salah mengeja salah misalnya atau Anda mungkin mengetik merpati yang tentu saja tidak berarti.

Sebelum kami mencoba dan menghapus masalah ini saya ingin menunjukkan kepada Anda satu lagi perintah yang sesuai dengan pernyataan IF.

Edit skrip rssget.sh Anda untuk melihat sebagai berikut:

#! / bin / bash

jika $ 1 = "semua"kemudian rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;elif $ 1 = "deskripsi"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 menggantinya dengan semua. Itu bukan bagian yang penting. Script di atas memperkenalkan elif yang merupakan cara singkat untuk mengatakan ELSE IF.

Sekarang naskah berfungsi sebagai berikut. Jika Anda lari sh rssget.sh semua lalu Anda mendapatkan deskripsi, tautan, dan judul. Jika Anda hanya berlari SH uraian rssget.shAnda hanya akan mendapatkan judul dan deskripsi. Jika Anda memberikan kata lain, Anda akan mendapatkan daftar judul.

Ini memperkenalkan cara cepat datang dengan daftar pernyataan kondisional. Cara lain untuk melakukan ELIF adalah dengan menggunakan apa yang dikenal sebagai pernyataan IF nested.

Berikut ini adalah contoh yang menunjukkan cara kerja pernyataan nested IF:

#! / 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 = "deskripsi" 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 = "deskripsi" 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 mengetik semua itu jika Anda suka atau salin dan tempel ke file rssget.sh Anda.

Skrip di atas memperkenalkan parameter ke-2 yang memungkinkan Anda memilih "about.com" atau "lxer.com" sebagai umpan RSS.

Untuk menjalankannya Anda mengetikkan hal-hal berikut:

sh rssget.sh semua tentangdotcom

atau

sh rssget.sh semua lxer

Tentu saja Anda dapat mengganti semua dengan deskripsi atau judul untuk memberikan deskripsi atau hanya judul saja.

Pada dasarnya kode di atas mengatakan jika parameter kedua adalah aboutdotcom maka lihatlah pernyataan kedua jika yang sama dari naskah sebelumnya yang lain jika parameter kedua adalah lxer kemudian lihat pada bagian dalam jika pernyataan lagi untuk memutuskan apakah akan menampilkan judul, deskripsi atau segalanya.

Skrip itu disediakan murni sebagai contoh pernyataan IF bersarang dan ada banyak hal yang salah dengan skrip itu, akan dibutuhkan artikel lain untuk menjelaskan semuanya. Masalah utamanya adalah bahwa itu tidak terukur.

Bayangkan Anda ingin menambahkan feed RSS lain seperti Everyday Linux User atau Linux Today? Skrip akan menjadi besar dan jika Anda memutuskan bahwa Anda ingin pernyataan JIKA dalam untuk mengubah Anda harus mengubahnya di banyak tempat.

Sementara ada waktu dan tempat untuk bersarang jika mereka harus digunakan dengan hemat. Biasanya ada cara untuk refactor kode Anda sehingga Anda tidak perlu IF bersarang sama sekali. Saya akan membahas topik ini di artikel mendatang.

Mari sekarang lihat memperbaiki masalah orang yang memasukkan parameter duff. Misalnya dalam skrip di atas jika pengguna memasukkan sesuatu selain "aboutdotcom" sebagai parameter ke-2, maka daftar artikel muncul dari umpan RSS dari LXER terlepas apakah pengguna memasukkan lxer atau tidak.

Selain itu, jika pengguna tidak memasukkan "semua" atau "deskripsi" sebagai parameter pertama, maka defaultnya adalah daftar judul yang mungkin atau tidak sesuai dengan yang diinginkan pengguna.

Lihatlah skrip berikut (atau salin dan tempel ke file rssget.sh Anda.

#! / bin / bash

jika $ 2 = "aboutdotcom" || $ 2 = "lxer"kemudian jika $ 1 = "semua" || $ 1 = "deskripsi" || $ 1 = "title" 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 = "deskripsi" 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 = "deskripsi" 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

Hal pertama yang perlu diperhatikan adalah skrip sekarang semakin besar dan Anda dapat dengan cepat melihat bagaimana di luar kendali pernyataan IF bertumpuk dapat menjadi.

Bit yang penting dalam skrip ini adalah pernyataan IF || pernyataan KETIKA bagian pada baris 2 dan baris 4.

The || singkatan OR. Jadi garisnyajika $ 2 = "aboutdotcom" || $ 2 = "lxer"periksa apakah parameter ke-2 sama dengan "aboutdotcom" atau "lxer". Jika tidak maka pernyataan IF selesai karena tidak ada lain pernyataan untuk yang paling luar JIKA.

Demikian juga pada baris 4 baris jika $ 1 = "semua" || $ 1 = "deskripsi" || $ 1 = "title"periksa apakah parameter pertama sama dengan "semua" atau "deskripsi" atau "judul".

Sekarang jika pengguna berjalankeju kentang sh rssget.shtidak ada yang dikembalikan sedangkan sebelumnya mereka akan menerima daftar judul dari LXER.

Kebalikan dari || aku s &&. Operator && adalah singkatan AND.

Saya akan membuat skrip terlihat lebih seperti mimpi buruk tetapi itu membuat semua pemeriksaan penting untuk memastikan pengguna telah memberikan 2 parameter.

#! / bin / bash

jika $ # -eq 2kemudian

jika $ 2 = "aboutdotcom" || $ 2 = "lxer" kemudian jika $ 1 = "semua" || $ 1 = "deskripsi" || $ 1 = "title" 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 = "deskripsi" 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 = "deskripsi" 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 ekstra dalam skrip itu adalah pernyataan IF luar lainnya sebagai berikut:jika $ # -eq 2. Jika Anda membaca artikel tentang parameter input, Anda akan tahu bahwa $ # mengembalikan hitungan jumlah parameter input. The -eq berarti persamaan. Oleh karena itu pernyataan JIKA memeriksa bahwa pengguna memasukkan 2 parameter dan jika mereka tidak keluar begitu saja tanpa melakukan apa-apa. (Tidak terlalu ramah).

Saya sadar bahwa tutorial ini semakin besar. Tidak ada lagi yang bisa ditutup minggu ini, tetapi saya ingin membantu merapikan skrip sebelum kami selesai.

Perintah terakhir yang perlu Anda pelajari tentang pernyataan kondisional adalah pernyataan CASE.

#! / bin / bash

jika $ # -eq 2kemudian kasus $ 2 masuk aboutdotcom) kasus $ 1 masuk semua) rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml ;; deskripsi) rsstail -d -u z.about.com/6/o/m/linux_p2.xml ;; judul) rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml ;; esac ;; lxer) kasus $ 1 masuk semua) rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss ;; deskripsi) rsstail -d -u http://lxer.com/module/newswire/headlines.rss ;; judul) rsstail -u http://lxer.com/module/newswire/headlines.rss ;; esac ;; esacfi

Pernyataan kasus adalah cara yang lebih baik untuk menulis JIKA LANJUTKAN JIKA TELAH JIKA LANJUTKAN JIKA.

Misalnya logika ini

JIKA buah = pisangLalu iniBILA JIKA buah = jerukLalu iniLAIN JIKA buah = buah anggurLalu iniBERAKHIR JIKA

dapat ditulis ulang sebagai:

buah dalam kasus pisang) melakukan hal ini ;; jeruk) melakukan hal ini ;; anggur) melakukan hal ini ;;esac

Pada dasarnya item pertama setelah kasus adalah hal yang akan Anda bandingkan (yaitu buah). Kemudian setiap item sebelum tanda kurung adalah hal yang Anda bandingkan dan jika cocok dengan garis yang mendahuluinya; akan berlari. Sebuah pernyataan kasus diakhiri dengan esac terbalik (yang merupakan kasus terbalik).

Dalam skrip rssget.sh, pernyataan kasus menghilangkan sebagian dari sarang yang mengerikan itu meskipun tidak benar-benar meningkatkannya.

Untuk benar-benar meningkatkan skrip, saya perlu memperkenalkan Anda kepada variabel.

Lihatlah kode berikut:

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"display = ""url = ""

jika $ # -lt 2 || $ # -gt 2kemudian echo "usage: rssget.sh semua | deskripsi | judul aboutdotcom | lxer"; keluar;fi

kasus $ 1 masuk semua) display = "- d -l -u" ;; deskripsi) display = "- d -u" ;; judul) display = "- u" ;;esac

kasus $ 2 masuk aboutdotcom) url = $ aboutdotcom; ;; lxer) url = $ lxer; ;;esacrsstail $ display $ url;

Suatu variabel didefinisikan dengan memberinya nama dan kemudian menetapkan nilai untuk itu. Dalam contoh di atas berikut ini adalah tugas variabel:

lxer = "lxer.com/module/newswire/headlines.rss"aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"display = ""url = ""

Script secara instan lebih mudah dikelola dengan menggunakan variabel. Misalnya setiap parameter ditangani secara terpisah sehingga tidak ada pernyataan IF bertumpuk.

Variabel tampilan sekarang diatur tergantung pada apakah Anda memilih semua, deskripsi atau judul dan variabel url diatur ke nilai variabel aboutdotcom atau nilai variabel lxer tergantung apakah Anda memilih aboutdotcom atau lxer.

Perintah rsstail sekarang hanya harus menggunakan nilai tampilan dan url untuk berjalan dengan benar.

Sementara variabel ditetapkan hanya dengan memberi mereka nama, untuk benar-benar menggunakannya, Anda harus menempatkan tanda $ di depan mereka. Dengan kata lain variabel = nilai set variabel ke nilai sedangkan $ variabel berarti memberi saya isi dari variabel.

Berikut ini adalah naskah 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/everydaylinux/WLlg"linuxtoday = "http://feedproxy.google.com/linuxtoday/linux"usage = "usage: rssget.sh semua | deskripsi | judul lxer | aboutdotcom | everydaylinuxuser | linuxtoday"display = ""url = ""

jika $ # -lt 2 || $ # -gt 2kemudian echo $ usage; keluar;fi

kasus $ 1 masuk semua) display = "- d -l -u" ;; deskripsi) display = "- d -u" ;; judul) display = "- u" ;; *) echo $ usage; keluar; ;;esac

kasus $ 2 masuk aboutdotcom) url = $ aboutdotcom; ;; lxer) url = $ lxer; ;; linuxtoday) url = $ linuxtoday; ;; everydaylinuxuser) url = $ everydaylinuxuser; ;; *) echo $ usage; keluar;esac

rsstail $ display $ url;

Script di atas memperkenalkan lebih banyak RSS feed dan ada variabel penggunaan yang memberitahu pengguna bagaimana menggunakan skrip jika mereka tidak memasukkan 2 variabel atau mereka memasukkan opsi yang salah untuk variabel.

Ringkasan

Ini telah menjadi artikel epik dan mungkin sudah terlalu jauh terlalu cepat. Dalam panduan berikutnya saya akan menunjukkan kepada Anda semua opsi perbandingan untuk pernyataan IF dan masih banyak lagi yang perlu dibicarakan berkaitan dengan variabel.

Ada juga lebih banyak yang dapat dilakukan untuk memperbaiki skrip di atas dan ini akan dibahas di panduan mendatang saat kami menjelajahi loop, grep, dan ekspresi reguler.

Lihat How To (Gulir ke bawah melewati kategori untuk melihat daftar artikel) bagian dari linux.about.com untuk menemukan panduan yang lebih berguna dari dual booting Windows dan Ubuntu untuk menyiapkan mesin virtual menggunakan kotak GNOME.