AXV

Sikllar va matnli oqimlar

for, while, until va quvurlar bilan matnni qayta ishlash

10-sinfDevOps4-hafta ยท 12-dars

Bugungi dars maqsadlari

for sikli

Ro'yxat, diapazon {1..5} va fayllar bo'yicha takrorlash.

while va until

Shart bo'yicha takrorlash, break va continue.

Matnli oqimlar

while read va quvur: sort | uniq | wc.

Dars raqamlarda

0
sikl turi: for, while, until
0
boshqaruv: break va continue
0
quvur bilan butun tahlil zanjiri
Qo'llanmada: for pkg in docker.io ... ; do sudo apt-get remove $pkg; done
01

for sikli

Ro'yxatdagi har bir element uchun

for qanday aylanadi?

ro'yxatAli Vali SoliISMjoriy elementblokdo ... done3 element = 3 aylanish

Qismlar ustiga bosing.

for ning to'rt ko'rinishi

for ISM in Ali Vali Soli; do
  echo "Salom, $ISM"
done
for i in {1..5}; do
  echo $i
done
for ((i=0; i<3; i++)); do
  echo $i
done
for F in *.txt; do
  echo "Fayl: $F"
done

Natija


for i in {1..5}; do
  echo "Aylanish: $i"
done
echo "Tugadi"
Terminal
Aylanish: 1
Aylanish: 2
Aylanish: 3
Aylanish: 4
Aylanish: 5
Tugadi

Hayotiy o'xshatish

Sikl: o'qituvchi 30 ta daftarni birin-ketin tekshiradi. Daftar o'zgaradi, tekshirish qoidasi bir xil.
  • Keyingi daftarni ol.
  • Qoidaga ko'ra tekshir.
  • Daftar qolmadimi? Qaytadan.
02

while va until

Shart bo'yicha takrorlash

while va until: ko'zgu juftlik

while

n=3
while [ $n -gt 0 ]; do ...
Shart rost ekan davom etadi.
VS

until

k=0
until [ $k -ge 3 ]; do ...
Shart rost bo'lmaguncha davom etadi.

while ichida

n = 3boshlang'ichn > 0 ?echo; n-1n = 0 bo'lganda shart yolg'on: sikl tugaydi

Qismlarni bosing.

while va until kodi


n=3
while [ $n -gt 0 ]; do
  echo $n
  n=$((n - 1))
done
k=0
until [ $k -ge 3 ]; do
  echo $k; k=$((k + 1))
done
while true; do ...; done cheksiz sikl; Ctrl+C bilan to'xtatiladi (qo'llanmada yuklama berish misoli).

Cheksiz sikl xatosi


n=3
while [ $n -gt 0 ]; do
  echo $n
done

n o'zgarmaydi: shart doim rost. Ctrl+C!

Cheksiz sikl xatosi


n=3
while [ $n -gt 0 ]; do
  echo $n
  n=$((n - 1))
done

Hisoblagich kamaygani uchun sikl tugaydi.

break va continue

break

Siklni butunlay to'xtatadi va undan chiqadi.
VS

continue

Joriy aylanishni tashlab, keyingisiga o'tadi.

Pastga bosing: misol.

Qo'shimcha: misol

for i in 1 2 3 4 5; do
  [ $i -eq 2 ] && continue
  [ $i -eq 4 ] && break
  echo $i
done   # 1 3

Tezkor bilim sinovi

for i in {1..5}; do [ $i -eq 3 ] && break; echo $i; done nima chiqaradi?

i 3 bo'lganda break siklni to'xtatadi, shuning uchun faqat 1 va 2 chiqadi.
03

Matnli oqimlar

Fayl va quvur bilan ishlash

Uch oqim: stdin, stdout, stderr

klaviaturayoki fayljarayonbuyruqstdoutnatijastderrxatolarstdin

Qismlarni bosing.

Quvur: matn zanjiri

stdinkirishsortuniq -cstdoutekransort royxat.txt | uniq -cquvur: bir buyruq chiqishi = keyingisining kirishi

Qismlarni bosing.

Faylni qatorma-qator o'qish


#!/bin/bash
N=0
while read -r QATOR; do
  N=$((N + 1))
  echo "$N. $QATOR"
done < royxat.txt
done < royxat.txt ni unutsangiz, read klaviaturadan kutadi.

Quvur amalda

Terminal
$ printf "a\nb\nc\na\n" > royxat.txt
$ sort royxat.txt | uniq -c
   2 a
   1 b
   1 c
$ cut -d: -f1 /etc/passwd | head -2
$ ls ~ | wc -l
Qo'llanma: uniq faqat ketma-ket takrorlarni oladi, shuning uchun avval sort.

Tahlil zanjirini yig'amiz

1. Manba

cat royxat.txt: matn oqimi.

2. Tartiblash

| sort: bir xil qatorlar yonma-yon.

3. Birlashtirish

| uniq yoki uniq -c.

4. Sanash

| wc -l: noyob qatorlar soni.

Odatiy xatolar

  • Siklda hisoblagich o'zgarmaydi: cheksiz sikl.
  • done < fayl yo'q: read klaviaturani kutadi.
  • sort siz uniq: takrorlar qoladi.
  • for F in $(ls): nomida bo'sh joy bo'lsa buziladi.
  • until shartini while kabi o'qish.

Tezkor bilim sinovi

Fayldagi noyob qatorlar sonini qaysi quvur beradi?

Avval sort bir xil qatorlarni yonma-yon qiladi, uniq takrorni olib tashlaydi, wc -l sanaydi.

Amaliy topshiriq 25 daqiqa

Osonfor bilan 1 dan 10 gacha sonlarni chiqaring.
O'rtawhile bilan 10 dan 1 gacha sanab, oxirida "Start!" deng.
Qiyin/etc/passwd foydalanuvchi nomlarini cut va while read bilan raqamlab chiqaring, jami sonni ko'rsating.

Bugungi dars xulosasi

O'rgandik

for, while, until, break, continue, while read, quvurlar.

Uyga vazifa

hisobot.sh: qatorlarni raqamlash va noyob qatorlar soni.

Keyingi dars

5-hafta: grep, sed, awk, xargs.