Bash / while ба until давталт

while ба until давталт

for давталт нь жагсаалт буюу тодорхой тооны давталтад тохиромжтой. Харин "нөхцөл үнэн байх хүртэл давт" гэх мэт тохиолдолд while ба until давталтыг ашигладаг. Хэрэглэгч зөв оролт өгөх хүртэл асуусаар байх, файл бэлэн болох хүртэл хүлээх — ийм хэрэглээнд эдгээр нь хамгийн тохиромжтой хэрэгсэл.

while — Нөхцөл үнэн байх хүртэл

while нь нөхцөл үнэн байх тохиолдолд давтсаар байдаг. Нөхцөл худал болмогц давталт зогсоно:

bash
#!/bin/bash

count=1

while [ $count -le 5 ]; do
    echo "Давталт: $count"
    count=$((count + 1))
done

echo "Дууслаа!"

Гаралт:

код
Давталт: 1
Давталт: 2
Давталт: 3
Давталт: 4
Давталт: 5
Дууслаа!

count=$((count + 1)) бол хувьсагчийн утгыг нэгээр нэмж байгаа хэлбэр. count++ товчлол бас ажиллана — (( count++ )) гэж бичнэ.

Хэрэглэгчийн оролтыг давтан шалгах

while давталтын хамгийн нийтлэг хэрэглээний нэг бол хэрэглэгч зөв утга оруулах хүртэл дахин дахин асуух:

bash
#!/bin/bash

password=""

while [ "$password" != "bash2024" ]; do
    read -s -p "Нууц үг оруулна уу: " password
    echo ""
    if [ "$password" != "bash2024" ]; then
        echo "Буруу нууц үг. Дахин оролдоно уу."
    fi
done

echo "Нэвтрэлт амжилттай!"

Нууц үг зөв болтол давталт үргэлжилнэ — хэдэн удаа буруу оруулсан ч зогсохгүй.

until — Нөхцөл үнэн болох хүртэл

until нь while-н эсрэг — нөхцөл худал байх тохиолдолд давтсаар, үнэн болмогц зогсоно:

bash
#!/bin/bash

count=1

until [ $count -gt 5 ]; do
    echo "Тоо: $count"
    (( count++ ))
done

while [ $count -le 5 ] ба until [ $count -gt 5 ] нь яг нэг үр дүн гаргана — ямар хэлбэр нь уншихад илүү ойлгомжтой байна, тэрийг сонгоорой.

Хязгааргүй давталт ба break

while true нь хэзээ ч зогсдоггүй давталт үүсгэнэ — зогсоохдоо break ашиглана:

bash
#!/bin/bash

echo "=== Тооцоолуур (0 оруулвал гарна) ==="

while true; do
    read -p "Тоо оруулна уу: " num

    if [ "$num" = "0" ]; then
        echo "Тооцоолуур хаагдлаа."
        break
    fi

    square=$((num * num))
    echo "$num ^ 2 = $square"
done

while true хэлбэрийг цэсний систем, серверийн daemon процесс, тасралтгүй ажилладаг script-д өргөн ашигладаг.

Файл мөрөөр уншиж давтах

while давталтыг read-тэй хослуулан файлын мөр бүрийг боловсруулж болно:

bash
#!/bin/bash

# servers.txt файлын мөр бүрийг уншина
while IFS= read -r line; do
    echo "Сервер: $line"
    ping -c 1 "$line" > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "  ✓ Хүртээмжтэй"
    else
        echo "  ✗ Хүртээмжгүй"
    fi
done < servers.txt

IFS= нь мөрийн эхэн ба эцсийн зайг хадгалдаг, -r нь урвуу налуу зураасыг тайлбарладаггүй — файл уншихад энэ хоёр сонголтыг хамт хэрэглэх нь шилдэг дадлага.

Дараагийн хичээлд:

Функц үндэс — давтагдах кодыг нэг удаа бичиж, дахин дахин дуудах аргыг сурна.