Keepalived test



Yüklə 13,79 Mb.
səhifə57/125
tarix21.08.2023
ölçüsü13,79 Mb.
#140060
1   ...   53   54   55   56   57   58   59   60   ...   125
abdurakhmonov

Oddiy skriptlarni yozish


Bu biz hozirgacha gaplashgan barcha narsalar birlasha boshlagan bo'lim. Skript yaratish juda qiziqarli va foydali bo'lishi mumkin, chunki ular sizga katta ishlarni avtomatlashtirishga yoki o'zingiz qayta-qayta qilayotgan ishni soddalashtirishga imkon beradi. Skript yaratishning eng muhim jihati shundaki: agar bu siz bir necha marta qiladigan narsa bo'lsa, uni skriptga aylantirishingiz kerak. Bu olish uchun ajoyib odat.
Skript juda oddiy tushunchadir; Bu shunchaki matn fayli bo'lib, unda qobiq birma-bir bajarilishi uchun buyruqlar mavjud. Bash tomonidan bajarilishi uchun yozilgan skript Bash skripti sifatida tanilgan va biz ushbu bo'limda yaratish ustida ishlaymiz.
Shu nuqtada, siz Linuxda matn muharriri bilan biroz mashq qildingiz deb o'ylayman. Vim yoki Nano-dan foydalanasizmi, muhim emas. Biz oldin matnli fayllarni tahrir qilganimiz uchun (biz bu haqda 5-bobda, Fayllar va kataloglarni boshqarishda ko'rib chiqdik ), men siz fayllarni qanday yaratish va tahrirlashni allaqachon bilasiz deb o'ylayman. Misol tariqasida quyidagi buyruq yordamida oddiy skript yaratish uchun matn muharriridan foydalanamiz:

nano ~/myscript.sh
Agar siz hali bilmagan bo'lsangiz, tilde ( ~ ) faqat foydalanuvchining uy katalogi uchun yorliqdir. Shuning uchun, mening tizimimda oldingi buyruq men terganim bilan bir xil bo'ladi: nano /home/jay/mysipt.sh
Fayl ichiga quyidagilarni kiriting:
#!/bin/bash
echo "Mening ismim $USER" echo "Mening uy katalogim $HOME" echo "Mening birlamchi matn muharririm $EDITOR"
Faylni saqlang va tahrirlovchidan chiqing. Ushbu faylni skript sifatida ishga tushirish uchun biz uni bajariladigan deb belgilashimiz kerak:
chmod +x ~/myscript.sh
Uni amalga oshirish uchun biz shunchaki faylga yo'l va fayl nomini chaqiramiz:
~/myscript.sh
Chiqish quyidagiga o'xshash bo'lishi kerak:
My name is jay
My home directory is /home/jay
My default text editor is vim
Birinchi qator, #!/bin/bash, agar siz uni ilgari ko'rmagan bo'lsangiz, g'alati tuyulishi mumkin. Odatda, xesh belgisi ( # ) bilan boshlangan satrlar tarjimon tomonidan e'tiborga olinmaydi. Birinchi qatordagisi bundan mustasno. Biz birinchi qatorda ko'rib turgan #!/bin/bash yozuvi hashbang yoki shebang sifatida tanilgan. Asosan, u faqat yadroga skript ichidagi buyruqlarni bajarish uchun qaysi tarjimondan foydalanish kerakligini aytadi. Agar biz Python tilida skript yozayotgan bo'lsak, #!/usr/bin/python kabi boshqa tarjimonlardan foydalanishimiz mumkin. Biz Bash skriptini yozayotganimiz uchun biz #!/bin/ bash dan foydalandik.
Keyingi satrlar oddiy bosma bayonotlar edi. Ularning har biri tizim o'zgaruvchisidan foydalangan, shuning uchun siz ushbu o'zgaruvchilarning birortasini allaqachon mavjud deb e'lon qilishingiz shart emas edi. Bu yerda biz joriy foydalanuvchi nomini, uy katalogini va standart matn muharririni chop etdik.
Skript kontseptsiyasi siz muntazam ravishda bajaradigan va avtomatlashtirishingiz mumkin bo'lgan narsalar haqida o'ylashni boshlaganingizda qimmatroq bo'ladi. Samarali Linux ma'muri bo'lish uchun avtomatlashtirish fikrini qabul qilish muhimdir. Shunga qaramay, agar siz ishni bir necha marta bajarmoqchi bo'lsangiz, uni skript qiling. Bu kontseptsiyani uyga olib borishga yordam beradigan yana bir misol skripti. Bu safar skript biroz foydali bo'ladi:
#!/bin/bash
sudo apt install -y apache2 sudo apt install -y libapache2-mod-php7.4 sudo a2enmod php7.4 sudo systemctl restart apache2
Biz bu erda qilgan ishimiz nazariy jihatdan veb-serverni sozlash skriptidir. Biz ushbu skriptni sayt tarkibini /var/www/html ga nusxalash, konfiguratsiya faylini yoqish va hokazo orqali kengaytirishimiz mumkin. Ammo oldingi skriptdan siz skript qilish siz qilayotgan ish hajmini qisqartirishda qanday foydali bo'lishi mumkinligini ko'rishingiz mumkin. Bu skript ilg'or veb-serverni o'rnatish skripti bo'lishi mumkin, uni siz shunchaki yangi serverga nusxalashingiz va keyin ishga tushirishingiz mumkin.
Misol apt bilan -y variantidan foydalanganiga e'tibor bering. Agar siz hali bilmagan bo'lsangiz, bu jarayonning bir qismi sifatida paydo bo'lishi mumkin bo'lgan so'rovlarga avtomatik ravishda "ha" deb javob beradi. Skriptlar odatda interaktiv emas, ya'ni ular paydo bo'lganda ko'rsatmalarga javob beradigan administrator uning oldida o'tirmasligi mumkin. Bundan tashqari, php7.4-ni yoqish uchun a2enmod buyrug'idan foydalanish juda zarur emas edi, chunki u libapache2-mod-php7.4 paketini o'rnatishning bir qismi sifatida avtomatik ravishda yoqilgan bo'lar edi. Lekin menimcha, siz bu fikrni tushunasiz; biz skriptlarda aniq bo'lishni va narsalar bo'lishini xohlagan holat uchun ko'rsatmalarni yozishni xohlaymiz.
Endi keling, skriptni biroz ilg'orlashtiraylik. Oldingi skript faqat ba'zi paketlarni o'rnatgan, biz buyruqlarni qobiqqa nusxalash va joylashtirish orqali osonlikcha bajarishimiz mumkin edi. Keling, ushbu skriptni biroz ko'rib chiqaylik. Keling, shartli bayonot yozamiz. Mana oldingi skriptning o'zgartirilgan versiyasi:
#!/bin/bash
# Install Apache if it's not already present if [ ! -f /usr/sbin/apache2 ]; then sudo apt install -y apache2 sudo apt install -y libapache2-mod-php7.4 sudo a2enmod php7.4 sudo systemctl restart apache2 fi
Endi u biroz qiziqroq bo'ladi. Xesh portlashdan keyingi birinchi qator skript nima qilishini bizga bildiruvchi izohdir:
# Install Apache if it's not already present
Sharhlar tarjimon tomonidan e'tiborga olinmaydi, lekin kod bloki nima qilayotganini bilish uchun foydalidir.
if iborasini boshlaymiz:
if [ ! -f /usr/sbin/apache2 ]; then
Bash, har qanday skript tili kabi, tarmoqlanishni qo'llab-quvvatlaydi va If bayonoti buni amalga oshirishning bir usuli hisoblanadi. Bu erda u apache2 binarining mavjudligini tekshiradi. Bu yerdagi -f opsiyasi biz faylni qidirayotganimizni bildiradi. Buning o'rniga katalog mavjudligini tekshirish uchun buni -d ga o'zgartirishimiz mumkin. Undov belgisi teskari belgidir. Bu, asosan, biror narsa yo'qligini tekshirayotganimizni anglatadi. Agar biror narsa bor yoki yo'qligini tekshirmoqchi bo'lsak, undov belgisini o'tkazib yuboramiz. Asosan, agar Apache allaqachon o'rnatilgan bo'lsa, biz skriptni hech narsa qilmaslik uchun o'rnatmoqdamiz. Bunday holda, qavslar ichida biz faqat qobiq buyrug'ini bajaramiz, keyin esa natija tekshiriladi. If iborasi ichida joylashgan buyruqlar shunchaki paketlarni o'rnatadi.
if iboramizni if backward ( fi ) so'zi bilan yopamiz. Agar buni qilishni unutgan bo'lsangiz, skript muvaffaqiyatsiz bo'ladi.
If iboralari kontseptsiyasiga kelsak, biz qiymatlarni ham solishtirishimiz mumkin. Quyidagi misolni ko'rib chiqing:

#!/bin/bash myvar=1
if [ $myvar -eq 1]; then echo "The variable equals 1" fi

Ushbu skript yordamida biz faqat o'zgaruvchining tarkibini tekshiramiz va agar u ma'lum bir raqamga teng bo'lsa, chora ko'ramiz. E'tibor bering, biz o'zgaruvchini yaratishda tirnoq belgilaridan foydalanmadik, chunki biz bu erda shunchaki raqamni (butun son) o'rnatdik. Agar biz o'zgaruvchining qiymatini satrga o'rnatmoqchi bo'lsak, biz faqat tirnoq belgilaridan foydalangan bo'lardik. If iborasi mos kelmasa, biz ham chora ko'rishimiz mumkin:

#!/bin/bash myvar=10
if [ $myvar -eq 1]; then echo "The variable equals 1" else echo "The variable doesn't equal 1" fi

if / else mantiqiy blokini qanday yaratishni ko'rsatadi. If ifodasi o'zgaruvchining 1 ga tengligini tekshiradi. Bunday emas, shuning uchun o'rniga else bloki ishlaydi.
Buyruqning -eq qismi ko'pchilik dasturlash tillarida == ga o'xshaydi. Qiymat biror narsaga teng yoki yo'qligini tekshiradi. Shu bilan bir qatorda -ne (teng emas), -gt (kattaroq), -ge (katta yoki teng), -lt (kichik) va hokazolardan foydalanishimiz mumkin.
Shu nuqtada, men sizga o'qishdan tanaffus qilishni maslahat beraman, keyingi skriptlarni mashq qilish uchun (amaliyot tushunchalarni xotiraga saqlashning kalitidir). Quyidagi sinovlarni sinab ko'ring:

  • Foydalanuvchidan yoshi kabi ma'lumotlarni kiritishini va uni o'zgaruvchiga saqlashini so'rang. Agar foydalanuvchi 30 dan kam raqam kiritsa, ularga yosh ekanligini ayting. Agar raqam 30 ga teng yoki undan katta bo'lsa, ularga eski ekanliklarini bildiruvchi bayonotni aks ettiring.

  • Faylni bir joydan ikkinchi joyga ko'chiradigan skript yozing. Bu fayl avval bor yoki yoʻqligini tekshirish uchun skriptni tekshirib koʻring va agar fayl mavjud boʻlmasa, xatoni chop etish uchun else bayonotiga ega boʻling.

  • Ushbu kitob davomida biz allaqachon ishlagan har qanday mavzu haqida o'ylab ko'ring va uni avtomatlashtirishga harakat qiling.

Keling, yana bir kontseptsiyani ko'rib chiqaylik. Loopning asosiy g'oyasi shunchaki shart bajarilgunga qadar biror narsani takrorlashdir. Quyidagi misol skriptini ko'rib chiqing:

#!/bin/bash myvar=1
while [ $myvar -le 15 ] do echo $myvar ((myvar++)) done

Keling, nima qilayotganini tushunish uchun skriptni satr bo'ylab ko'rib chiqaylik.
myvar=1
myvar deb nomlangan boshqaruv o'zgaruvchisini yaratamiz va uni 1 ga tenglashtiramiz:
while [ $myvar -le 15 ]
while tsiklini o'rnatamiz. Shart bajarilmaguncha, while tsikli davom etadi. Bu erda biz $myvar 15 ga teng bo'lguncha blokdagi bayonotlarni qayta-qayta bajarishni aytamiz. Haqiqatan ham, agar siz biror narsani noto'g'ri kiritgan bo'lsangiz, while tsikli abadiy davom etishi mumkin, bu Infinite Loop deb nomlanadi. Cheksiz tsikl xavfli va serveringiz javob bermasligiga olib kelishi mumkin. Agar siz -ge 0 dan foydalansangiz, aynan shunday yaratgan bo'lar edingiz:
do
do bilan biz for tsikliga biror narsa qilishni boshlashga tayyorlanishini aytamiz:
echo $myvar
$myvar o'zgaruvchisining joriy tarkibini chop etmoqdamiz - bu erda ajablanarli narsa yo'q:
((myvar++))
Ushbu bayonot bilan biz o'zgaruvchimizning qiymatini 1 ga oshirish uchun incrementor deb nomlanuvchi narsadan foydalanamiz. Qo‘sh qavs qobiqqa biz arifmetik amal bajarayotganimizni bildiradi, shuning uchun tarjimon biz satrlar bilan ishlayapmiz deb o‘ylamaydi:
done
while tsiklini yozishni tugatgandan so'ng, biz blokni done bilan yopishimiz kerak. Agar siz skriptni to'g'ri yozgan bo'lsangiz, u 1 dan 15 gacha hisoblanishi kerak.
Loopning yana bir turi For Loop hisoblanadi. For tsikli to'plamdagi har bir element uchun bayonotni bajaradi. Masalan, siz katalogdagi har bir faylga qarshi buyruqni for tsikli bajarishingiz mumkin. Ushbu misolni ko'rib chiqing:
#!/bin/bash
turtles='Donatello Leonardo Michelangelo Raphael' for t in $turtles do echo $t done
Keling, bu erda nima qilganimizni chuqurroq ko'rib chiqaylik:
turtles='Donatello Leonardo Michelangelo Raphael'
Bu erda biz ro'yxat tuzamiz va uni nomlar bilan to'ldiramiz. Har bir nom ro'yxatdagi bitta elementdir. Biz bu ro'yxatni turtles deb ataymiz. Biz ushbu ro'yxatning mazmunini boshqa har qanday o'zgaruvchida bo'lgani kabi echo bilan ham ko'rishimiz mumkin:
echo $turtles
for tsiklini qanday o'rnatishimizni ko'rib chiqamiz:
for t in $turtles
Endi biz tarjimonga ro'yxatdagi har bir element uchun biror narsa qilishga tayyorgarlik ko'rishni aytamiz. Bu yerda t ixtiyoriy, biz bu yerda istalgan harfni yoki hatto uzunroq qatorni ishlatishimiz mumkin edi. Biz skript ishlayotgan joriy elementni ushlab turish uchun foydalanmoqchi bo'lgan vaqtinchalik o'zgaruvchini o'rnatmoqdamiz.
do
do bilan biz for tsikliga biror narsa qilishni boshlashga tayyorlanishini aytamiz:
echo $t
$t ning joriy qiymatini stdout ga chop etmoqdamiz:
done
while tsiklida qilganimizdek, tarjimonga bu for tsiklining oxiri ekanligini bildirish uchun bajarilgan deb yozamiz. Ro'yxatdagi har bir elementni mustaqil ravishda chop etish uchun biz shunchaki for tsiklini yaratdik:
Donatello
Leonardo
Mikelanjelo
Rafael
Biz ro'yxatimizga to'rtta turtle nomini kiritdik va biz ularni takrorlash va ularni birma-bir chop etishga muvaffaq bo'ldik.

Yüklə 13,79 Mb.

Dostları ilə paylaş:
1   ...   53   54   55   56   57   58   59   60   ...   125




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin