Тоон үйлдлүүд
Bash нь анхнаасаа текст боловсруулахад зориулагдсан тул тоон арифметик хийх нь бусад хэлүүдтэй харьцуулбал арай өвөрмөц байдаг. $(( )) хашилт хэрэглэхгүйгээр a + b гэж бичвэл 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 хэрэглэнэ.
Хувьсагчийн утгыг өөрчлөх
#!/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) хэрэгтэй:
#!/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-г ачааллана.
Тоон харьцуулалт ба (( ))
(( )) дотор тооцоолол ба харьцуулалтыг хамт хийж болно:
#!/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:
#!/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 дотор файлд өгөгдөл хадгалах, унших, нэмж бичих аргуудыг сурна.