Bash / test оператор ба [[ ]]

test оператор ба [[]]

Өмнөх хичээлд if [ нөхцөл ] хэлбэрийг ашигласан. Тэр [ ] нь бодвол test гэдэг командын өөр бичилтийн хэлбэр юм. Bash мөн илүү орчин үеийн [[ ]] хэлбэрийг дэмждэг — аль хэлбэрийг хэрэглэх нь тухайн нөхцлөөс хамаарна. Энэ хичээлд тоо, мөр, файл шалгах бүх операторуудыг системтэйгээр судална.

Тоон харьцуулалт

Тооцооллын утгуудыг харьцуулахдаа дараах операторуудыг ашиглана:

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) шалгахдаа өөр операторууд хэрэглэнэ:

bash
#!/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

Мөрийг " хашилтанд байлгах нь маш чухал — мөр хоосон байвал хашилтгүй тохиолдолд алдаа гарна.

Файл шалгах

Скрипт дотор файл байгаа эсэх, директор мөн эсэхийг шалгах нь маш нийтлэг хэрэглээ:

bash
#!/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 дэмждэг. Хэд хэдэн давуу тал бий:

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 гинжийг ашиглалгүйгээр цэвэрхэн бичих аргыг сурна.