Yangi boshlanuvchilar uchun ko'rsatma - shartlar va o'zgaruvchilar

Kirish

"BASH boshlanuvchilar uchun qo'llanma" ning uchinchi qismiga xush kelibsiz. Agar avvalgi ikkita maqolani o'tkazib yubormasangiz, ehtimol siz ushbu qo'llanmaning boshqa BASH skriptlari qo'llanmalaridan farq qilganini bilishni xohlaysiz.

Ushbu qo'llanma to'liq boshlang'ich tomonidan BASHga yoziladi va shuning uchun siz o'rgangan o'quvchi sifatida bilib olasiz. Men BASH uchun boshlang'ichman ekanman, men dasturiy ta'minotni ishlab chiqish fonidan kelib chiqdim, biroq, men yozgan narsalarning ko'pi Windows platformasi uchun edi.

Birinchi ikkita rahbarni tashrif buyurib ko'rishingiz mumkin:

Agar BASH skriptiga yangi bo'lsangiz, men bu bilan davom ettirishdan oldin birinchi ikki qo'llanmani o'qishni tavsiya etaman.

Ushbu qo'llanmada foydalanuvchining kirishini tekshirish va buyruq fayllarining qanday ishlashini nazorat qilish uchun shartli so'zlarni qanday ishlatishni ta'kidlab o'taman.

Rsstailni o'rnatish

Ushbu qo'llanmani rioya qilish uchun rsstail deb nomlangan va RSS-xabarlarni o'qish uchun ishlatiladigan buyruqlar qatorini qo'llash kerak bo'ladi.

Agar siz Debian / Ubuntu / Mint asosidagi tarqatish turini foydalanayotgan bo'lsangiz:

sudo apt-get install rsstail

Fedora / CentOS va boshqalar uchun quyidagilarni yozing:

yumni rsstail o'rnatish

OpenSUSE uchun quyidagilarni yozing:

zypper rsstail o'rnatish

IF ifodasi

Terminalni oching va rssget.sh deb nomlangan faylni yozing:

sudo nano rssget.sh

Nano muharriri ichida quyidagi matnni kiriting:

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

CTRL va O ni bosib faylni saqlang va keyin CTRL va X tugmalarini bosib chiqing.

Quyidagilarni yozib skriptni ishga tushiring:

sh rssget.sh

Buyruq skripti linux.about.com RSS-dan sarlavhalar ro'yxatini qaytaradi.

Bu juda foydali skript emas, chunki u faqat bitta RSS tasma sarlavhasini oladi, lekin Linux.about.com RSS tasmasi yo'lini eslab qolishdan saqlaydi.

Rssget.sh skriptini yana nano-da oching va faylni quyidagicha tahrir qiling:

#! / Bin / bash

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

Quyidagilarni yozish bilan skriptni qayta ishga tushiring:

sh rssget.sh verbose

Bu safar RSS tasmasi sarlavha, havola va tavsif bilan qaytib keladi.

Keling, skriptni biroz batafsil tahlil qilamiz:

Biz yozgan har bir skriptda #! / Bin / bash paydo bo'ladi. Keyingi qator asosan foydalanuvchi tomonidan taqdim etilgan dastlabki parametrga qaraydi va uni "noto'g'ri" so'zi bilan solishtiradi. Agar kirish parametri va "batafsil" so'zi keyinroq orasidagi satrlar bilan mos bo'lsa va fi yuguradi.

Yuqoridagi skript aniq ravshandir. Agar kirish parametrini umuman ta'minlamasangiz nima bo'ladi? Javob: Siz kutilmagan operatsion tarmog'i bo'yicha xatolik yuz berasiz.

Boshqa katta nuqson shuki, agar siz "og'zaki" so'zni keltirmasangiz, hech narsa sodir bo'lmaydi. Ideal, agar siz so'zni noto'g'ri ifoda qilmasangiz, buyruqlar sarlavhalar ro'yxatini qaytaradi.

Rssget.sh faylini tahrir qilish uchun kodni quyidagi kabi o'zgartiring:

#! / Bin / bash

agar [$ 1 = "batafsil"]
keyin
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
boshqa
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Faylni yozib oling va quyidagilarni yozing:

sh rssget.sh verbose

Sarlavhalar, tavsiflar va havolalar ro'yxati ko'rinadi. Endi uni quyidagicha qayta ishga tushiring:

sh rssget.sh sarlavhalari

Bu safar faqat sarlavha ro'yxati ko'rinadi.

Skriptning qo'shimcha qismi 4-satrda va else ifodasini keltiradi. Asosan, bu skript endi "parametr" so'zining birinchi ifodasi bo'lsa, "RSS" so'zining tavsifi, havolalari va sarlavhalarini olish mumkin, lekin agar birinchi parametr boshqa narsa bo'lsa, faqat sarlavha ro'yxatini oling.

Buyruqlar biroz yaxshilandi, ammo bu hali hammasi noto'g'ri. Agar parametrni kiritmasangiz, siz hali ham xatoga yo'l qo'yasiz. Agar siz parametrni taqdim qilsangiz ham, faqat sizning nomingizdan istamayman, deyishingiz faqatgina sarlavha kerakligini anglatmaydi. Masalan, siz noto'g'ri noto'g'ri noto'g'ri talaffuz qilishingiz mumkin yoki siz kabutarlar yozgan bo'lishingiz mumkin.

Ushbu masalalarni sinab va tozalashdan oldin men IF ifodasi bilan ketadigan yana bitta buyruqni ko'rsatmoqchiman.

Rssget.sh skriptini quyidagicha tekshiring:

#! / Bin / bash

agar [$ 1 = "hammasi"]
keyin
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "tavsif"]
keyin
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

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

Men so'zning og'zidan qutulishga qaror qildim va uni hamma bilan almashtirdim. Bu muhim ahamiyatga ega emas. Yuqoridagi skriptda ELIF IF ifodasini keltiradi.

Endi skript quyidagi tarzda ishlaydi. Sh rssget.sh- ni ishlatsangiz, siz tavsiflar, havolalar va sarlavhalar bilan tanishasiz . Buning o'rniga faqat rssget.sh ta'rifini ishlatasiz, faqatgina sarlavhalar va tushuntirishlar bo'ladi. Agar siz boshqa so'zlar bilan ta'minlasangiz, undagi nomlarning ro'yxatini olasiz.

Bu esa, shartli so'zlar ro'yxati bilan tezda paydo bo'lish usulini taqdim etadi. ELIFni bajarishning muqobil usullaridan biri - ifoda qilingan IF ifodasi sifatida ma'lum bo'lgan narsani ishlatishdir.

Quyidagi ifoda IEL so'zlari qanday ishlashini ko'rsatadigan misoldir:

#! / Bin / bash

agar [$ 2 = "aboutdotcom"]
keyin
agar [$ 1 = "hammasi"]
keyin
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "tavsif"]
keyin
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

boshqa
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
boshqa
agar [$ 1 = "hammasi"]
keyin
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "tavsif"]
keyin
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
boshqa
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

Agar xohlasangiz, yoki rssget.sh faylga nusxa ko'chiring va yapıştırsanız, bularning barchasini yozing.

Yuqoridagi skriptda "RSS" yoki "lxer.com" ni tanlashingiz mumkin bo'lgan 2 parametr mavjud.

Uni ishga tushirish uchun quyidagilarni yozing:

sh rssget.sh haqida hamma yoqdi

yoki

sh rssget.sh barcha lxer

Albatta, tavsiflar yoki sarlavhalar bilan ta'minlash uchun barcha tavsiflar yoki sarlavhalar bilan almashishingiz mumkin.

Asosan, yuqoridagi kod ikkinchi parametr haqida aboutdotcom bo'lsa, agar ikkinchi parametr lxer bo'lsa, avvalgi buyruq fayli bilan bir xil bo'lgan ikkinchi if deyilganiga qarasangiz, undagi sarlavhalar, tavsiflarni ko'rsatishga qaror qilish uchun ichki if yoki hamma narsa.

Ushbu skript faqat ifoda etilgan IF ifodasi misoli sifatida taqdim etiladi va u skriptda juda ko'p narsalar noto'g'ri. Ularning hammasini tushuntirish uchun yana bir maqola kerak bo'ladi. Asosiy masala shundaki, u miqyosli emas.

Har kungi Linux foydalanuvchisi yoki Linux Today kabi yana bir RSS tasmasi qo'shishni xohlaysizmi? Skript buyuk bo'lardi va agar ichki IF ifodasini o'zgartirishni xohlasangiz, uni ko'p joylarda o'zgartirishingiz kerak edi.

Ichki o'rnatilgan IF uchun vaqt va joy mavjud bo'lsa-da, ular kamdan-kam ishlatilishi kerak. Odatda kodni qayta tuzishning bir usuli bor, shunda siz kiritilgan IFga umuman muhtoj emassiz. Men kelgusidagi maqolada bu mavzuga keldim.

Keling, tuff parametrlariga kiradigan kishilarga oid muammolarni hal qilishni ko'rib chiqaylik. Misol uchun, yuqoridagi skriptda foydalanuvchi 2 dona parametr sifatida "dotdokcom" dan boshqa biror narsa kirsa, foydalanuvchi LXERga kirish yoki olmaslikdan qat'i nazar, LXER-dan RSS tasmasidan olingan maqolalar ro'yxati ko'rinadi.

Bundan tashqari, agar foydalanuvchi "barcha" yoki "ta'rif" ni 1 parametrga kiritmasa, asl qiymati - foydalanuvchining maqsadiga mos keladigan yoki bo'lmasligi mumkin bo'lgan sarlavhalar ro'yxati.

Quyidagi skriptga qarang (yoki nusxa ko'chiring va rssget.sh faylingizga joylashtiring.

#! / Bin / bash

agar [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
keyin
agar [$ 1 = "hammasi"] || [$ 1 = "tavsif"] || [$ 1 = "sarlavha"]
keyin
agar [$ 2 = "aboutdotcom"]
keyin

agar [$ 1 = "hammasi"]
keyin
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "tavsif"]
keyin
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

boshqa
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
boshqa
agar [$ 1 = "hammasi"]
keyin
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "tavsif"]
keyin
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
boshqa
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

Eslatib o'tamiz, birinchi navbatda, skript hozirda juda katta bo'lib, siz IF ning ifodalari qanday bo'lishi mumkinligini nazorat qilishingiz mumkin.

Ushbu skriptda muhim bo'lgan bit IF ifodasi || 2-satrda va 4-satrda THEN qismining bayonoti.

| | YoKI degani. Shunday qilib, agar [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] 2 parametrenin "aboutdotcom" yoki "lxer" ga tengligini tekshiradi. Agar u bo'lmasa, agar IF ifodasi to'liq bo'lsa, chunki tashqi IF uchun boshqa hech narsa ifodasi yo'q .

Xuddi shunday 4-qatorda [$ 1 = "all"] || [$ 1 = "tavsif"] || [$ 1 = "title"] 1 parametr "hammasi" yoki "ta'rif" yoki "nom" ga teng yoki yo'qligini tekshiradi.

Endi agar foydalanuvchi rssget.sh kartoshka pishloqini ishlatsa, hech narsa qaytarilmaydi, holbuki ular LXERdan sarlavhalar ro'yxatini olishdan oldin.

| | && hisoblanadi. && operatori AND uchun turadi.

Men skriptni qorong'ilikka o'xshashroq qilmoqchiman, lekin foydalanuvchi barcha parametrlarni taqdim etganiga ishonch hosil qilish uchun barcha muhim tekshiruvlarni amalga oshiradi.

#! / Bin / bash

agar [$ # -qq 2]
keyin

agar [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
keyin
agar [$ 1 = "hammasi"] || [$ 1 = "tavsif"] || [$ 1 = "sarlavha"]
keyin
agar [$ 2 = "aboutdotcom"]
keyin

agar [$ 1 = "hammasi"]
keyin
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "tavsif"]
keyin
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

boshqa
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
boshqa
agar [$ 1 = "hammasi"]
keyin
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "tavsif"]
keyin
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
boshqa
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

Ushbu skriptdagi qo'shimcha bittadan tashqari IF ifodasi quyidagicha ifodalanadi: agar [$ # -eq 2] . Kirish parametrlari haqidagi maqolani o'qib chiqsangiz, $ # ning kirish parametrlari sonini qaytarishini bilib olasiz. -eq tengdir. If IF ifodasi foydalanuvchining 2 parametrga kirganligini tekshiradi va agar qilmasalar, hech narsa qilmasdan chiqadi. (Ayniqsa do'stona emas).

Men ushbu qo'llanmaning juda katta ekanligini bilaman. Bu haftani yopish uchun ko'proq narsa yo'q, lekin biz tugatishdan oldin skriptni tuzatishga yordam berishni xohlayman.

Shartli so'zlar haqida bilib olishingiz kerak bo'lgan oxirgi buyruq - bu CASE bayonnomasi.

#! / Bin / bash


agar [$ # -qq 2]
keyin
$ 2 miqdorida
taxminan)
$ 1 ga teng
barchasi)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
;;
tushuntirish)
rsstail -d -u z.about.com/6/o/m/linux_p2.xml
;;
sarlavha)
rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
;;
Esac
;;
lxer)
$ 1 ga teng
barchasi)
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
;;
tushuntirish)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
;;
sarlavha)
rsstail -u http://lxer.com/module/newswire/headlines.rss
;;
Esac
;;
Esac
fi

Masala bayonnomasi, ELSE if IFSE ELSE If IF IF yozishning eng yaxshi usuli hisoblanadi.

Masalan, bu mantiq

Agar meva = banan bo'lsa
Shundan so'ng bu
ELSE agar meva = apelsin
Shundan so'ng bu
ELSE if meva = uzum
Shundan so'ng bu
END IF ifodasi

quyidagi kabi qayta yozilishi mumkin:

ichidagi meva
banan)
buni qiling
;;
apelsin)
buni qiling
;;
uzum)
buni qiling
;;
Esac

Hodisadan keyin birinchi narsa - siz solishtiradigan narsa (ya'ni, meva). Keyinchalik paragraflar oldidagi har bir element sizniki bilan taqqoslaydigan narsadir va agar u avvalgi qatorlarga mos keladigan bo'lsa ;; qochib ketadi. Vaziyat bayonnomasi teskari esak bilan bekor qilinadi (bu holat orqaga qarab).

Rssget.sh skriptida case bayonoti bu dahshatli uyning ba'zi qismini olib tashlaydi, ammo uni yetarlicha yaxshilay olmaydi.

Skriptni chindan ham yaxshilash uchun men sizni o'zgaruvchan narsalar bilan tanishtirishim kerak.

Quyidagi kodga qarang:

#! / Bin / bash

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

agar [$ # -lt 2] || [$ # -gt 2]
keyin
echo "foydalanish: rssget.sh [barchasi] ta'rifi] title] [aboutdotcom | lxer]";
Chiqish;
fi

$ 1 ga teng
barchasi)
displey = "- d-l -u"
;;
tushuntirish)
displey = "- d -u"
;;
sarlavha)
display = "- u"
;;
Esac

$ 2 miqdorida
taxminan)
url = $ dollarlik;
;;
lxer)
url = $ lxer;
;;
Esac
rsstail $ display $ url;

O'zgaruvchining nomini berish va unga qiymat berish orqali aniqlanadi. Yuqoridagi misolda quyidagilar o'zgaruvchan vazifalarni bajaradi:

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

Skript, o'zgaruvchilar yordamida bir zumda ko'proq boshqarish mumkin. Misol uchun, har bir parametr alohida-alohida ko'rib chiqiladi va shuning uchun ichki IF ifodalari mavjud emas.

Ko'rsatkich o'zgaruvchisi endi hamma tanlanganmi, ta'rifi yoki sarlavhasi va url o'zgaruvchisi haqida taxminan o'zgaruvchining qiymatiga yoki lxer o'zgaruvchining qiymatiga qarab tanlang, yoki sizdodcom yoki lxerni tanlashingizga bog'liq.

Rsstail buyrug'i endi faqat ekran va url qiymatini to'g'ri ishlatish uchun ishlatish kerak.

Argumentlar faqat ularga nom berish orqali o'rnatilsa-da, aslida ularni ishlatish uchun siz oldingizda $ belgisini qo'yishingiz kerak. Boshqacha aytganda, variable = value o'zgarmaydigan qiymati o'zgaruvchan bo'lsa, $ o'zgaruvchisi menga o'zgaruvchining mazmunini beradi.

Quyidagi dars ushbu qo'llanmaning yakuniy skriptidir.

#! / 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"
foydalanish = "foydalanish: rssget.sh [hamma] ta'rifi | sarlavha] [lxer | fordotcom | everydaylinuxuser | linuxtoday]"
display = ""
url = ""

agar [$ # -lt 2] || [$ # -gt 2]
keyin
echo $ foydalanish;
Chiqish;
fi

$ 1 ga teng
barchasi)
displey = "- d-l -u"
;;
tushuntirish)
displey = "- d -u"
;;
sarlavha)
display = "- u"
;;
*)
echo $ foydalanish;
Chiqish;
;;
Esac

$ 2 miqdorida
taxminan)
url = $ dollarlik;
;;
lxer)
url = $ lxer;
;;
linuxtoday)
url = $ linuxtoday;
;;
everydaylinuxuser)
url = $ everydaylinuxuser;
;;
*)
echo $ foydalanish;
Chiqish;
Esac

rsstail $ display $ url;

Yuqoridagi skript ko'pgina RSS tasmalarini taqdim etadi va foydalanuvchi o'zgaruvchiga kirmaydi yoki o'zgaruvchilar uchun noto'g'ri variantlarni kiritganda, foydalanuvchi skriptdan qanday foydalanishni bildiradigan foydalanish parametrlari mavjud.

Xulosa

Bu epik maqola bo'lib, juda tez orada juda uzoqqa ketgan bo'lishi mumkin. Keyingi qo'llanmada sizga IF ifodalari uchun taqqoslashning barcha variantlari ko'rsatiladi va o'zgaruvchan narsalar haqida gapirish uchun yana ko'p narsalar mavjud.

Bundan tashqari, yuqorida ko'rsatilgan skriptni yaxshilash uchun ko'proq ishlarni bajarish mumkin, va biz looplar, grep va muntazam ifodalarni o'rganishimiz natijasida kelajakda qo'llanmalarda muhokama qilinadi.

GNOME qutilarini ishlatib, virtual mashinani o'rnatish uchun Windows va Ubuntu- dan ikkilamchi yuklashni boshlash uchun qo'shimcha ma'lumotni topish uchun l inux.about.com saytidagi "How to (Toifalar pastidan pastga siljiting" bo'limiga qarang) bo'limiga qarang.