Bash / Мөр үйлдлүүд

Мөр үйлдлүүд

Bash дотор мөр (string) боловсруулах нь маш нийтлэг хэрэглээ — файлын нэрнээс өргөтгөлийг салгах, URL-аас домэйн авах, log файлаас мэдээлэл ялгах гэх мэт. Bash нь string manipulation-н баялаг хэрэгслүүдийг шууд суулгасан байдаг тул гадаад программ дуудалгүйгээр маш их зүйл хийж болно.

Мөрийн урт ба үндсэн мэдээлэл

bash
#!/bin/bash

text="Сайн уу, Монгол!"

echo ${#text}          # Уртыг харуулна: 17
echo ${text}           # Мөрийг харуулна
echo "${text}"         # Хашилттай — аюулгүй, зөвлөмж болгодог

${#хувьсагч} нь мөрийн тэмдэгтийн тоог буцаадаг — файлын нэр хэт урт эсэхийг шалгах зэрэг хэрэглээнд тохиромжтой.

Хэсгийг авах (substring)

${хувьсагч:эхлэл:урт} хэлбэрээр мөрийн тодорхой хэсгийг авна:

bash
#!/bin/bash

text="Уланбаатар хот"

echo ${text:0:10}      # Эхний 10 тэмдэгт: Уланбаатар
echo ${text:11}        # 11-р тэмдэгтээс эцэс хүртэл: хот
echo ${text: -3}       # Сүүлийн 3 тэмдэгт: хот
echo ${text:0:4}       # Эхний 4: Улан

filename="report_2024.txt"
echo ${filename:0:6}   # report
echo ${filename: -3}   # txt

Эхлэлийн индекс 0-ээс тооцогдоно. Сөрөг тоо ашиглавал мөрийн эцсээс тооцдог — гэхдээ : -3 хэлбэрт зай заавал байна.

Утга солих (substitution)

Мөр дотрх тодорхой хэсгийг өөр утгаар солих:

bash
#!/bin/bash

path="/home/user/documents/file.txt"

# Эхний тохирлыг солих
echo ${path/user/bolد}           # /home/bold/documents/file.txt

# Бүх тохирлыг солих
text="алим алим алим"
echo ${text//алим/гүзээлзгэнэ}   # гүзээлзгэнэ гүзээлзгэнэ гүзээлзгэнэ

# Зөвхөн эхлэлийн тохирлыг солих
echo ${text/#алим/АЛИМ}          # АЛИМ алим алим

# Зөвхөн төгсгөлийн тохирлыг солих
echo ${text/%алим/АЛИМ}          # алим алим АЛИМ

Угтвар ба дагавар хасах

Файлын нэрийг боловсруулахад энэ техник маш хэрэгтэй:

bash
#!/bin/bash

filename="backup_2024_01_15.tar.gz"

# Хамгийн богино тохирлыг эхэнтэй нь хасах (#)
echo ${filename#backup_}         # 2024_01_15.tar.gz

# Хамгийн урт тохирлыг эхэнтэй нь хасах (##)
echo ${filename##*.}             # gz  (сүүлийн цэгийн дараах хэсэг)

# Хамгийн богино тохирлыг эцэгтэй нь хасах (%)
echo ${filename%.gz}             # backup_2024_01_15.tar

# Хамгийн урт тохирлыг эцэгтэй нь хасах (%%)
echo ${filename%%.*}             # backup_2024_01_15

# Практик жишээ: өргөтгөл солих
for f in *.txt; do
    mv "$f" "${f%.txt}.md"
done

# ба % операторууд нь файлын өргөтгөлтэй ажиллахдаа үнэлж баршгүй хэрэгтэй.

Том/жижиг үсэг хөрвүүлэх

bash
#!/bin/bash

text="Улаанбаатар Хот"

echo ${text^^}     # Бүгдийг том үсэг: УЛААНБААТАР ХОТ
echo ${text,,}     # Бүгдийг жижиг үсэг: улаанбаатар хот
echo ${text^}      # Зөвхөн эхний үсгийг том болгох
echo ${text,}      # Зөвхөн эхний үсгийг жижиг болгох

# Хувьсагчийн нэр том үсгээр нормчлох
input="MONGODB"
normalized="${input,,}"    # mongodb
echo "$normalized"

^^ ба ,, операторууд нь Bash 4.0-с дээш дэмжигддэг — macOS-н анхдагч Bash (3.2) дэмжихгүй тул macOS дээр brew install bash хийгээд /usr/local/bin/bash ашиглах хэрэгтэй.

Анхдагч утга тохируулах

bash
#!/bin/bash

# Хэрэв хувьсагч хоосон бол анхдагч утгыг ашиглана
name=${1:-"Зочин"}           # $1 хоосон бол "Зочин" ашиглана
echo "Сайн уу, $name!"

port=${PORT:-8080}            # PORT тохируулаагүй бол 8080
echo "Порт: $port"

# Хэрэв хоосон бол анхдагч утгыг тохируулна (тэр хэвээр хадгална)
: ${DATABASE_URL:="localhost:5432"}
echo "DB: $DATABASE_URL"

${хувьсагч:-анхдагч} хэлбэр нь script-г илүү найдвартай болгодог — орчны хувьсагч тохируулаагүй байх тохиолдолд аюулгүй анхдагч утга ашиглана.

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

Тоон үйлдлүүд — Bash дотор нэмэх, хасах, үржүүлэх, хуваах, модуль зэрэг арифметик хийх аргуудыг сурна.