Bash / Тоон үйлдлүүд

Тоон үйлдлүүд

Bash нь анхнаасаа текст боловсруулахад зориулагдсан тул тоон арифметик хийх нь бусад хэлүүдтэй харьцуулбал арай өвөрмөц байдаг. $(( )) хашилт хэрэглэхгүйгээр a + b гэж бичвэл Bash тоо биш текст гэж ойлгоно. Энэ хичээлд Bash дотор арифметик хийх бүх аргыг системтэйгээр судална.

$(( )) — Арифметикийн хашилт

Bash дотор тооцоолол хийх үндсэн арга нь $(( )) хэлбэр:

bash
#!/bin/bash

a=10
b=3

echo $((a + b))    # Нийлбэр:   13
echo $((a - b))    # Зөрүү:     7
echo $((a * b))    # Үржвэр:    30
echo $((a / b))    # Хуваарь:   3  (бүхэл тооны хуваалт)
echo $((a % b))    # Үлдэгдэл:  1  (modulo)
echo $((a ** b))   # Зэрэг:     1000 (10³)

Бүхэл тооны хуваалт гэдгийг анхаараарай — 10 / 3 = 3 болно, 3.33 биш. Аравтын бутархайтай тооцоол хийхэд bc хэрэглэнэ.

Хувьсагчийн утгыг өөрчлөх

bash
#!/bin/bash

count=0

count=$((count + 1))   # Нэмэх
count=$((count - 1))   # Хасах
count=$((count * 2))   # Үржүүлэх

# Товчилсон хэлбэр — (( )) дотор $ хэрэггүй
(( count++ ))          # Нэгээр нэмэх
(( count-- ))          # Нэгээр хасах
(( count += 5 ))       # 5-аар нэмэх
(( count *= 2 ))       # 2-оор үржүүлэх
(( count **= 3 ))      # Гурав дахь зэрэгт дэвшүүлэх

echo "Эцсийн утга: $count"

(( )) нь $(( ))-с ялгаатай — утга буцаадаггүй, харин if нөхцөлд шууд хэрэглэж болдог: if (( count > 10 )).

bc — Аравтын бутархайтай тооцоол

$(( )) нь зөвхөн бүхэл тоо дэмждэг. Аравтын тооцоолд bc (basic calculator) хэрэгтэй:

bash
#!/bin/bash

# scale нь аравтын байрны тоог тодорхойлно
result=$(echo "scale=2; 10 / 3" | bc)
echo "10 / 3 = $result"             # 10 / 3 = 3.33

pi=$(echo "scale=5; 4*a(1)" | bc -l)
echo "Пи = $pi"                     # Пи = 3.14159

# Хувь тооцоолох
total=1500
percent=15
discount=$(echo "scale=2; $total * $percent / 100" | bc)
echo "$total₮-н $percent% = $discount₮"

# Их тоон тооцоол
big=$(echo "2^64" | bc)
echo "2^64 = $big"

-l сонголт нь тригонометрийн болон логарифм функцуудыг дэмждэг math library-г ачааллана.

Тоон харьцуулалт ба (( ))

(( )) дотор тооцоолол ба харьцуулалтыг хамт хийж болно:

bash
#!/bin/bash

score=85

# if дотор (( )) ашиглах
if (( score >= 90 )); then
    echo "A"
elif (( score >= 80 )); then
    echo "B"
elif (( score >= 70 )); then
    echo "C"
else
    echo "F"
fi

# Сондгой/тэгш тодорхойлох
for i in {1..10}; do
    if (( i % 2 == 0 )); then
        echo "$i — тэгш"
    else
        echo "$i — сондгой"
    fi
done

[ $a -gt $b ] хэлбэрээс (( a > b )) хэлбэр нь уншихад илүү ойлгомжтой тул тоон харьцуулалтад (( )) ашиглах нь зөвлөмж.

Практик жишээ: Хувь тооцоолуур

Суралцсан зүйлсийг нэгтгэсэн жижиг script:

bash
#!/bin/bash

echo "=== Файлын хэмжээний статистик ==="

total=0
count=0
largest=0
largest_file=""

for file in *.txt 2>/dev/null; do
    [ -f "$file" ] || continue
    size=$(wc -c < "$file")          # Байтаар хэмжээ
    total=$((total + size))
    (( count++ ))

    if (( size > largest )); then
        largest=$size
        largest_file=$file
    fi
done

if (( count == 0 )); then
    echo "txt файл олдсонгүй."
    exit 0
fi

average=$((total / count))

echo "Нийт файл:      $count"
echo "Нийт хэмжээ:    $total байт"
echo "Дундаж хэмжээ:  $average байт"
echo "Хамгийн том:    $largest_file ($largest байт)"

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

Файл уншиж бичих — script дотор файлд өгөгдөл хадгалах, унших, нэмж бичих аргуудыг сурна.