Bash / for давталт

for давталт

Давтамжтай ажлыг автоматжуулах — энэ бол Bash script-н хамгийн хүчтэй талуудын нэг. 100 файлыг нэг нэгээр гараар боловсруулахын оронд for давталт ашиглан нэг script-ээр бүгдийг шийдэж болно. for бол Bash-н хамгийн өргөн ашиглагддаг бүтцүүдийн нэг.

for — Үндсэн бүтэц

bash
for хувьсагч in жагсаалт; do
    # давтагдах код
done

do блок дотрох код нь жагсаалтын элемент бүрт нэг удаа гүйцэтгэгдэнэ. Хамгийн энгийн жишээ:

bash
#!/bin/bash

for name in Болд Бат Дорж Ану; do
    echo "Сайн уу, $name!"
done

Гаралт:

код
Сайн уу, Болд!
Сайн уу, Бат!
Сайн уу, Дорж!
Сайн уу, Ану!

Тооны мужаар давтах

Тоон мужийг {эхлэл..төгсгөл} хэлбэрээр зааж болно:

bash
#!/bin/bash

# 1-ээс 5 хүртэл
for i in {1..5}; do
    echo "Тоо: $i"
done

# 0-ээс 10 хүртэл 2-оор алгасах
for i in {0..10..2}; do
    echo "$i"
done

# Буцааж тоолох
for i in {5..1}; do
    echo "Бэлэн болох: $i..."
done
echo "Явлаа!"

{эхлэл..төгсгөл..алхам} хэлбэрт гурав дахь утга алхамыг заана.

C-хэлбэрийн for давталт

Бусад програмчлалын хэлтэй адил хэлбэрийг Bash мөн дэмждэг:

bash
#!/bin/bash

# for (( эхлэл ; нөхцөл ; алхам ))
for (( i = 1; i <= 5; i++ )); do
    echo "Давталт $i"
done

# Буцааж тоолох
for (( i = 10; i >= 1; i-- )); do
    printf "Хоцрол: %2d\n" $i
done

(( )) доторх арифметик нь $ тэмдэгтгүйгээр шууд ажилладаг.

Файлуудыг давтан боловсруулах

for давталтын хамгийн нийтлэг хэрэглээ бол олон файлыг нэг дор боловсруулах:

bash
#!/bin/bash

# Одоогийн директорын бүх .txt файлыг боловсруул
for file in *.txt; do
    echo "Файл олдлоо: $file"
    wc -l "$file"     # Мөрийн тоог тоол
done

# Бүх script файлд гүйцэтгэх эрх олго
for script in scripts/*.sh; do
    chmod +x "$script"
    echo "$script — эрх олголоо"
done

*.txt glob загвар тухайн директорт тохирох бүх файлыг олж, давталтад өгнө.

Командын гаралтыг давтах

$(команд) ашиглан командын гаралтыг давталтад ашиглаж болно:

bash
#!/bin/bash

# ls-н гаралтыг давтах
for item in $(ls /etc/*.conf); do
    echo "Тохиргооны файл: $item"
done

# Мөрүүдийг файлаас уншиж давтах
for line in $(cat servers.txt); do
    echo "Серверт холбогдож байна: $line"
    ping -c 1 "$line" > /dev/null && echo "  ✓ Хүртээмжтэй" || echo "  ✗ Хүртээмжгүй"
done

break ба continue

Давталтын явцыг удирдах хоёр тусгай команд бий:

bash
#!/bin/bash

# break — давталтыг бүрмөсөн зогсооно
for i in {1..10}; do
    if [ $i -eq 5 ]; then
        echo "5 дахь давталтад зогслоо"
        break
    fi
    echo "Давталт: $i"
done

# continue — тухайн давталтыг алгасан дараагийнх руу шилжинэ
for i in {1..10}; do
    if (( i % 2 == 0 )); then
        continue    # Тэгш тоог алгасна
    fi
    echo "Сондгой тоо: $i"
done

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

while ба until давталт — нөхцөл үнэн байх хүртэл буюу үнэн болох хүртэл давтах хоёр бүтцийг сурна.