while ба until давталт
for давталт нь жагсаалт буюу тодорхой тооны давталтад тохиромжтой. Харин "нөхцөл үнэн байх хүртэл давт" гэх мэт тохиолдолд while ба until давталтыг ашигладаг. Хэрэглэгч зөв оролт өгөх хүртэл асуусаар байх, файл бэлэн болох хүртэл хүлээх — ийм хэрэглээнд эдгээр нь хамгийн тохиромжтой хэрэгсэл.
while — Нөхцөл үнэн байх хүртэл
while нь нөхцөл үнэн байх тохиолдолд давтсаар байдаг. Нөхцөл худал болмогц давталт зогсоно:
#!/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 давталтын хамгийн нийтлэг хэрэглээний нэг бол хэрэглэгч зөв утга оруулах хүртэл дахин дахин асуух:
#!/bin/bash
password=""
while [ "$password" != "bash2024" ]; do
read -s -p "Нууц үг оруулна уу: " password
echo ""
if [ "$password" != "bash2024" ]; then
echo "Буруу нууц үг. Дахин оролдоно уу."
fi
done
echo "Нэвтрэлт амжилттай!"
Нууц үг зөв болтол давталт үргэлжилнэ — хэдэн удаа буруу оруулсан ч зогсохгүй.
until — Нөхцөл үнэн болох хүртэл
until нь while-н эсрэг — нөхцөл худал байх тохиолдолд давтсаар, үнэн болмогц зогсоно:
#!/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 ашиглана:
#!/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-тэй хослуулан файлын мөр бүрийг боловсруулж болно:
#!/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 нь урвуу налуу зураасыг тайлбарладаггүй — файл уншихад энэ хоёр сонголтыг хамт хэрэглэх нь шилдэг дадлага.
Дараагийн хичээлд:
Функц үндэс — давтагдах кодыг нэг удаа бичиж, дахин дахин дуудах аргыг сурна.