Panduan Wiwitan Kanggo BASH - Kondisi Lan Variabel

Pambuka

Sugeng rawuh ing bagian katelu saka "Panduan Pemula Kanggo BASH". Yen sampeyan ora nyana artikel sadurunge, sampeyan bakal pengin ngerti apa sing nggawe pandhuan iki beda karo panuntun scripting BASH liyane.

Pandhuan iki ditulis dening wong anyar sing lengkap kanggo BASH lan minangka pembaca sampeyan sinau kaya aku sinau. Nalika aku anyar kanggo BASH aku teka saka latar mburi software pembangunan sanajan akeh barang sing aku wis ditulis wis kanggo platform Windows.

Sampeyan bisa ndeleng rong guide pisanan kanthi ngunjungi:

Yen sampeyan anyar kanggo nulis skrip BASH, aku saranake maca rong pedoman pisanan sadurunge terus karo sing iki.

Ing pandhuan iki aku bakal nuduhaké cara migunakaké pernyataan bersyarat kanggo nguji input pangguna lan ngontrol cara fungsi naskah.

Instal ulang

Supaya bisa ngetutake pandhuan iki sampeyan kudu nginstal aplikasi baris perintah sing disebut rsstail sing digunakake kanggo maca feed RSS .

Yen sampeyan nggunakake distribusi dhasar Debian / Ubuntu / Mint ing ngisor iki:

sudo apt-get install rsstail

Kanggo Fedora / CentOS etc ketik ing ngisor iki:

yum install rsstail

Kanggo openSUSE ketik ing ngisor iki:

zypper install rsstail

Ing statement yen

Bukak terminal lan gawe file sing disebut rssget.sh kanthi ngetik:

sudo nano rssget.sh

Ing editor nano ketik teks kasebut:

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

Simpen file kanthi mencet CTRL lan O banjur metu kanthi mencet CTRL lan X.

Jalanake script kanthi ngetik ngisor iki:

sh rssget.sh

Script bakal ngasilake dhaptar judhul saka feed RSS linux.about.com.

Iku ora minangka script banget migunani amarga mung njupuk judhul saka siji RSS feed nanging nyimpen kudu ngelingi path menyang feed RSS.about.com RSS.

Bukak script rssget.sh ing nano maneh lan owahi berkas supaya katon kaya ing ngisor iki:

#! / bin / bash

yen [$ 1 = "bungkus"]
banjur
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Jalanake script maneh kanthi ngetik:

sh rssget.sh verbose

Wektu iki feed RSS bali karo judhul, link lan deskripsi.

Ayo analisa skrip kanthi dicithak:

#! / Bin / bash katon ing saben script sing kita tulis. Baris sabanjure nampilake parameter input pisanan sing diwenehake dening pangguna lan mbandingake karo tembung "tegese". Yen parameter input lan ukara "verbose" cocog karo garis antarane banjur lan fi mlayu.

Tulisan ing ndhuwur kasebut kanthi cetha cacat. Apa sing kedadeyan yen sampeyan ora nyedhiyani parameter input? Jawaban sampeyan entuk kesalahan ing sajrone baris sing ora dikarepke operator.

Ing cacat utama liyane yaiku yen sampeyan ora menehi tembung "verbose", banjur ora ana apa-apa. Saene yen sampeyan ora nyedhiyani tembung verbose, script bakal ngasilake daftar irah-irahan.

Gunakake nano maneh kanggo ngowahi file rssget.sh lan mbenake kode kaya mangkene:

#! / bin / bash

yen [$ 1 = "bungkus"]
banjur
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
liyane
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Simpen file lan jalanake kanthi ngetik:

sh rssget.sh verbose

Daftar irah-irahan, deskripsi lan pranala bakal katon. Saiki mbukak maneh kaya ing ngisor iki:

judhul sh rssget.sh

Wektu iki mung daftar irah-irahan sing katon.

Sisih ekstra saka naskah ing baris 4 lan nepangake pernyataan liya . Akeh tulisan saiki tegese yen parameter kapisan yaiku tembung "verbose" entuk gambaran, pranala lan judhul kanggo feed RSS nanging yen parameter pisanan liya mung entuk daftar irah-irahan.

Aksara iki rada apik nanging isih cacat. Yen gagal ngetik parameter sampeyan isih bakal kasil. Malah yen sampeyan menehi paramèter, mung kanthi ngandika sampeyan ora pengin tegese ora ateges sampeyan pengin mung judhul. Sampeyan bisa uga wis diucapake salah kaya utawa minangka sampeyan wis ngetik merpati sing mesthi ora ana artine.

Sadurunge kita nyoba lan mbusak masalah iki aku pengin nuduhake sampeyan siji liyane printah sing dadi karo statement IF.

Ngowahi skrip rssget.sh kanggo katon kaya ing ngisor iki:

#! / bin / bash

yen [$ 1 = "kabeh"]
banjur
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "deskripsi"]
banjur
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

liyane
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Aku mutusake kanggo nyisihake tembung verbose lan ngganti karo kabeh. Iku ora penting. Tulisan ing ndhuwur ngenalake elif sing minangka cara cendhak ELSE yen.

Saiki naskah iki bisa ditrapake kaya ing ngisor iki. Yen sampeyan mbukak sh rssget.sh kabeh sampeyan njaluk deskripsi, pranala lan judhul. Yen tinimbang sampeyan mung mbukak sh rssget.sh description sampeyan mung njaluk judhul lan deskripsi. Yen sampeyan nyiapake tembung liyane sampeyan bakal entuk dhaptar judhul.

Iki nuduhake cara cepet teka karo dhaptar statement sing sarat. Cara alternatif kanggo nindakake ELIF yaiku nggunakake apa sing diarani minangka statement.

Ing ngisor iki minangka conto sing nuduhaké cara nggawe statement sing dijenengi:

#! / bin / bash

yen [$ 2 = "aboutdotcom"]
banjur
yen [$ 1 = "kabeh"]
banjur
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "deskripsi"]
banjur
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

liyane
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
liyane
yen [$ 1 = "kabeh"]
banjur
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "deskripsi"]
banjur
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
liyane
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

Bebas ngetik kabeh sing yen sampeyan seneng utawa nyalin lan paste menyang file rssget.sh.

Script ing ndhuwur ngenalake parameter 2 sing ngidini sampeyan milih "about.com" utawa "lxer.com" lan feed RSS.

Kanggo mbukak sampeyan ngetik ing ngisor iki:

sh rssget.sh kabeh aboutdotcom

utawa

sh rssget.sh kabeh lxer

Sampeyan bisa mesthi ngganti kabeh kanthi deskripsi utawa judhul kanggo menehi katrangan utawa judhul.

Mesthi kode ing ndhuwur nyatakake yen parameter sing kapindho kira aboutdotcom banjur katon ing angka loro yen pernyataan sing padha karo naskah liyane sing diarani liya yen paramèter sing kapindho yaiku lxer banjur katon ing jero yen pernyataan maneh kanggo mutusake apa kanggo nuduhake judhul, deskripsi utawa kabeh.

Tulisan iki diwenehake kanthi tulus minangka conto saka panjelasan sing diwenehake lan ana akeh perkara sing salah karo naskah sing bakal njupuk artikel liyane kanggo nerangake kabeh. Masalah utama iku ora bisa diukur.

Mbayangno sampeyan pengin nambah feed RSS liyane kayata Everyday Linux User utawa Linux Today? Tulisan iki bakal dadi gedhe lan yen sampeyan mutusake yen sampeyan pengin ukara ING jero kanggo ngganti sampeyan kudu ngganti ing sawetara panggonan.

Nalika ana wektu lan panggonan kanggo dijupuk, kudu digunakake kanthi sparingly. Biasane ana cara kanggo refactor kode sampeyan supaya sampeyan ora perlu dijupuk ing. Aku bakal teka ing subyek ing artikel mangsa.

Ayo saiki katon ing mbenerake masalah wong ngetik duff paramèter. Contone, ing skrip kasebut ing ndhuwur yen pangguna ngemot barang-barang liyane saka "aboutdotcom" minangka paramèter ke-2 banjur dhaptar artikel katon saka feed RSS saka LXER tanpa mangerteni apa pangguna ngetik lxer utawa ora.

Kajaba manawa pangguna ora ngetik "kabeh" utawa "deskripsi" minangka paramèter 1 banjur standar kasebut minangka daftar irah-irahan sing bisa kasebut utawa ora dimaksudake pangguna.

Deleng ing skrip ing ngisor iki (utawa nyalin lan paste menyang file rssget.sh.

#! / bin / bash

yen [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
banjur
yen [$ 1 = "kabeh"] || [$ 1 = "katrangan"] || [$ 1 = "judhul"]
banjur
yen [$ 2 = "aboutdotcom"]
banjur

yen [$ 1 = "kabeh"]
banjur
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "deskripsi"]
banjur
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

liyane
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
liyane
yen [$ 1 = "kabeh"]
banjur
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "deskripsi"]
banjur
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
liyane
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

Wangsulan kapisan yaiku menawa naskah saiki wis nyedhaki amba lan sampeyan bisa ndeleng kanthi cepet manawa metu saka kontrol sing dijupuk.

Bubar sing penting ing skrip iki yaiku statement yen || statement THEN bagean ing baris 2 lan baris 4.

Ing || stands for OR. Dadi baris yen [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] ngetes apa parameter 2 padha karo "aboutdotcom" utawa "lxer". Yen ora banjur statement IF lengkap amarga ora ana statement liya kanggo paling njaba IF.

Kajaba iku ing baris 4 baris yen [$ 1 = "kabeh"] || [$ 1 = "katrangan"] || [$ 1 = "judhul"] ngecek manawa parameter 1 padha karo "kabeh" utawa "deskripsi" utawa "judhul".

Saiki, yen pangguna nganggo sh rssget.sh kentang keju ora ana sing dibalekake sadurungé wis nampa daftar gelar saka LXER.

Ngelawan | | yaiku &&. Operator && tegese AND.

Aku bakal nggawe script katon luwih kaya ngipi elek nanging nggawe kabeh priksa penting kanggo nggawe manawa pangguna wis nyedhiyani 2 paramèter.

#! / bin / bash

yèn [$ # -eq 2]
banjur

yen [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
banjur
yen [$ 1 = "kabeh"] || [$ 1 = "katrangan"] || [$ 1 = "judhul"]
banjur
yen [$ 2 = "aboutdotcom"]
banjur

yen [$ 1 = "kabeh"]
banjur
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "deskripsi"]
banjur
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

liyane
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
liyane
yen [$ 1 = "kabeh"]
banjur
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "deskripsi"]
banjur
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
liyane
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

Siji waé sing ekstra ing naskah kasebut yaiku pernyataan IF njaba liya kayata: yen [$ # -eq 2] . Yen maca artikel babagan paramèter input, sampeyan bakal ngerti sing $ # ngasilake cacahing paramèter input. The -eq stands for equals. Dadi statement IF mriksa sing pangguna ngetik 2 paramèter lan yen padha ora mung metu tanpa nindakake apa-apa. (Ora kaya loropaken).

Aku ngerti yen tutorial iki cukup gedhe. Ora luwih akeh kanggo nutupi minggu iki nanging aku pengin bantuan ngrampungake script sadurunge kita rampung.

Siji pungkasan printah sing sampeyan kudu mangerteni statement bersyarat iku statement CASE.

#! / bin / bash


yèn [$ # -eq 2]
banjur
cilik $ 2 ing
aboutdotcom)
cilik $ 1 ing
kabeh)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
;;;
description)
rsstail -d -u z.about.com/6/o/m/linux_p2.xml
;;;
judhul)
rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
;;;
esac
;;;
lxer)
cilik $ 1 ing
kabeh)
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
;;;
description)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
;;;
judhul)
rsstail -u http://lxer.com/module/newswire/headlines.rss
;;;
esac
;;;
esac
fi

Pernyataan cilik iku cara nulis sing luwih apik tinimbang ELSE yen wis ana.

Contone, logika iki

Yen woh = bananas
Banjur iki
BISA yen buah = jeruk
Banjur iki
ELSE Yen buah = grapes
Banjur iki
AKHIR

bisa ditulis minangka:

woh cilik ing
bananas)
nindakake iki
;;;
jeruk)
nindakake iki
;;;
grapes)
nindakake iki
;;;
esac

Mesthine item sing pisanan sawise kasus iku yaiku sing bakal dibandhingake (ie woh). Banjur saben item sadurunge kurung iku apa sing sampeyan mbandhingake lan yen cocog karo garis sadurunge; bakal mlayu. Pernyataan cilik diakhiri karo esac kuwalik (sing kasus sakdurunge).

Ing skrip rssget.sh, prastawa kasus mbusak sawetara nesting sing ala sanajan ora nggedhekake cukup.

Kanggo nemen nambah script aku kudu ngenalake sampeyan menyang variabel.

Deleng ing ngisor iki kode:

#! / bin / bash

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

yen [$ # -lt 2] || [$ # -gt 2]
banjur
echo "usage: rssget.sh [all | description | title] [aboutdotcom | lxer]";
metu;
fi

cilik $ 1 ing
kabeh)
tampilan = "- d -l -u"
;;;
description)
tampilan = "- d -u"
;;;
judhul)
tampilan = "- u"
;;;
esac

cilik $ 2 ing
aboutdotcom)
url = $ aboutdotcom;
;;;
lxer)
url = $ lxer;
;;;
esac
rsstail $ display $ url;

Variabel ditetepake kanthi menehi jeneng kasebut lan banjur menehi nilai kasebut. Ing conto ing ndhuwur kasebut ana tugas-tugas variabel:

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

Tulisan iki langsung bisa diatur kanthi nggunakake variabel. Contone, saben parameter ditangani kanthi kapisah lan ora ana statement sing dijupuk.

Variabel tampilan saiki disetel gumantung apa sampeyan milih kabeh, deskripsi utawa judhul lan variabel url disetel menyang nilai variabel aboutdotcom utawa nilai variabel lxer gumantung apa sampeyan milih aboutdotcom utawa lxer.

Perintah rsstail saiki mung kudu nggunakake nilai tampilan lan url kanggo mbukak kanthi bener.

Bebarengan karo variabel sing disetel mung menehi jeneng, kanggo bener digunakake, sampeyan kudu nyeleh tandha $ ing ngarep. Ing tembung liyané, variabel = nilai set minangka variabel karo nilai, déné variable $ tegese menehi kula isi saka variabel.

Ing ngisor iki minangka naskah pungkasan kanggo tutorial iki.

#! / 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"
usage = "usage: rssget.sh [all | description | title] [lxer | aboutdotcom | everydaylinuxuser | linuxtoday]"
tampilan = ""
url = ""

yen [$ # -lt 2] || [$ # -gt 2]
banjur
echo $ usage;
metu;
fi

cilik $ 1 ing
kabeh)
tampilan = "- d -l -u"
;;;
description)
tampilan = "- d -u"
;;;
judhul)
tampilan = "- u"
;;;
*)
echo $ usage;
metu;
;;;
esac

cilik $ 2 ing
aboutdotcom)
url = $ aboutdotcom;
;;;
lxer)
url = $ lxer;
;;;
linuxtoday)
url = $ linuxtoday;
;;;
everydaylinuxuser)
url = $ everydaylinuxuser;
;;;
*)
echo $ usage;
metu;
esac

rsstail $ display $ url;

Tulisan ing ndhuwur ngenalake luwih akeh feed RSS lan ana variable panggunaan sing ngandhani pangguna carane nggunakake naskah yen kedhaftar ora ngetik 2 variabel utawa ngetik opsi salah kanggo variabel kasebut.

Ringkesan

Iki wis dadi artikel epik lan uga wis suwe banget banget. Ing pandhuan sabanjure aku bakal nuduhake sampeyan kabeh opsi comparison kanggo IF statements lan isih akeh liyane kanggo ngomong babagan regards karo variabel.

Ana uga luwih sing bisa ditindakake kanggo ningkatake naskah ing ndhuwur lan iki bakal dilacak ing panuntun mangsa nalika kita njlajah puteran, grep lan ekspresi reguler.

Priksa cara Carane (Gulung mudhun sasi kanggo kategori dhaptar artikel) ing l inux.about.com kanggo nemu pandhuan sing luwih migunani saka Windows booting dual lan Ubuntu kanggo nyetel mesin virtual nganggo kothak GNOME .