test оператор ба [[]]
Өмнөх хичээлд if [ нөхцөл ] хэлбэрийг ашигласан. Тэр [ ] нь бодвол test гэдэг командын өөр бичилтийн хэлбэр юм. Bash мөн илүү орчин үеийн [[ ]] хэлбэрийг дэмждэг — аль хэлбэрийг хэрэглэх нь тухайн нөхцлөөс хамаарна. Энэ хичээлд тоо, мөр, файл шалгах бүх операторуудыг системтэйгээр судална.
Тоон харьцуулалт
Тооцооллын утгуудыг харьцуулахдаа дараах операторуудыг ашиглана:
#!/bin/bash
a=10
b=20
if [ $a -eq $b ]; then echo "Тэнцүү"; fi # equal
if [ $a -ne $b ]; then echo "Тэнцүү биш"; fi # not equal
if [ $a -lt $b ]; then echo "$a нь $b-с бага"; fi # less than
if [ $a -le $b ]; then echo "Бага буюу тэнцүү"; fi # less than or equal
if [ $a -gt $b ]; then echo "$a нь $b-с их"; fi # greater than
if [ $a -ge $b ]; then echo "Их буюу тэнцүү"; fi # greater than or equal
| Оператор | Утга |
| -------- | ---------------------- |
| -eq | Тэнцүү (equal) |
| -ne | Тэнцүү биш (not equal) |
| -lt | Бага (less than) |
| -le | Бага буюу тэнцүү |
| -gt | Их (greater than) |
| -ge | Их буюу тэнцүү |
Мөрийн харьцуулалт
Мөр (string) шалгахдаа өөр операторууд хэрэглэнэ:
#!/bin/bash
name="Болд"
empty=""
if [ "$name" = "Болд" ]; then
echo "Нэр тохирч байна"
fi
if [ "$name" != "Бат" ]; then
echo "Нэр Бат биш байна"
fi
if [ -z "$empty" ]; then
echo "Хувьсагч хоосон байна" # -z: zero length
fi
if [ -n "$name" ]; then
echo "Хувьсагч хоосон биш байна" # -n: non-zero length
fi
Мөрийг " хашилтанд байлгах нь маш чухал — мөр хоосон байвал хашилтгүй тохиолдолд алдаа гарна.
Файл шалгах
Скрипт дотор файл байгаа эсэх, директор мөн эсэхийг шалгах нь маш нийтлэг хэрэглээ:
#!/bin/bash
file="notes.txt"
dir="projects"
if [ -e "$file" ]; then
echo "$file файл буюу директор оршино" # exists
fi
if [ -f "$file" ]; then
echo "$file бол файл" # regular file
fi
if [ -d "$dir" ]; then
echo "$dir бол директор" # directory
fi
if [ -r "$file" ]; then
echo "Уншиж болно" # readable
fi
if [ -w "$file" ]; then
echo "Бичиж болно" # writable
fi
if [ -x "$file" ]; then
echo "Гүйцэтгэж болно" # executable
fi
| Оператор | Утга |
| -------- | ---------------------------- |
| -e | Файл буюу директор оршино |
| -f | Энгийн файл мөн |
| -d | Директор мөн |
| -r | Унших эрхтэй |
| -w | Бичих эрхтэй |
| -x | Гүйцэтгэх эрхтэй |
| -s | Файл хоосон биш (хэмжээ > 0) |
[[ ]] — Орчин үеийн хэлбэр
[[ ]] нь [ ]-н дэвшилтэт хувилбар бөгөөд зөвхөн Bash дэмждэг. Хэд хэдэн давуу тал бий:
#!/bin/bash
name="Уланбаатар"
# Regex шалгах — [ ] дотор боломжгүй
if [[ "$name" =~ ^У ]]; then
echo "Нэр У үсгээр эхэлнэ"
fi
# && ба || шууд ашиглаж болно
read -p "Нас: " age
if [[ $age -ge 18 && $age -le 65 ]]; then
echo "Ажилчдын насны бүлэгт хамаарна"
fi
# Хоосон зайг хашилтгүйгээр аюулгүй шалгана
file="my file.txt"
if [[ -f $file ]]; then # [ ] дотор бол алдаа гарна
echo "Файл байна"
fi
Ерөнхий зөвлөмж: [[ ]] нь илүү найдвартай тул script бичихдээ [[ ]]-г ашигла. [ ] нь sh зэрэг бусад shell-тэй нийцтэй байх шаардлага байвал хэрэглэнэ.
Дараагийн хичээлд:
case хуваарилагч — олон утгатай нөхцөлийг if/elif гинжийг ашиглалгүйгээр цэвэрхэн бичих аргыг сурна.