Skip to content
LIVE FEED

BlogLộ trình học Bash Script

Lộ trình học Bash Script

Lộ trình dành cho người đã quen thuộc với Linux/Docker/command line, tập trung thực hành và ứng dụng vào công việc thực tế (network/telecom, security, DevOps).


Giai đoạn 1 — Nền tảng (3-5 ngày)

  • Shell cơ bản: shebang (#!/bin/bash), permission (chmod +x), cách chạy script (./script.sh vs bash script.sh vs source)
  • Biến: khai báo, $VAR vs ${VAR}, biến môi trường (export), biến đặc biệt ($1 $2 $@ $# $? $$ $0)
  • Quoting: single quote vs double quote vs backtick — đây là chỗ 90% người mới bị lỗi, nên nắm kỹ ngay từ đầu
  • I/O redirection: >, >>, <, 2>, &>, pipe |

Giai đoạn 2 — Control flow (3-5 ngày)

  • if/elif/else, test operators ([ ] vs [[ ]] — nên dùng [[ ]] cho bash hiện đại)
  • for, while, until loop
  • case statement (rất hữu ích khi parse argument hoặc protocol type)
  • Functions: local variable, return code vs echo để “trả giá trị”
  • Exit code, $?, set -e, set -u, set -o pipefail — nên tập thói quen dùng ngay từ sớm

Giai đoạn 3 — Xử lý text/data (1 tuần)

Phần quan trọng nhất với công việc phân tích log/capture:

  • grep, sed, awk (awk đáng đầu tư sâu — rất mạnh cho parse log Diameter/GTP dạng text)
  • cut, sort, uniq, tr, wc
  • Array trong bash (indexed array và associative array declare -A)
  • String manipulation: substring, replace, split bằng IFS
  • Regex trong bash ([[ $x =~ regex ]])

Giai đoạn 4 — Kỹ thuật nâng cao cơ bản (1 tuần)

  • Xử lý argument dòng lệnh: getopts cho script CLI tử tế
  • Trap signal (trap ... SIGINT EXIT) — quan trọng khi viết script chạy nền/monitoring
  • Xử lý file descriptor, process substitution <(...)
  • Debug: bash -x script.sh, set -x/set +x
  • Viết script an toàn: quoting biến path, kiểm tra input, tránh injection khi script gọi lệnh khác

Giai đoạn 5 — Ứng dụng thực tế (song song, xuyên suốt)

Vừa học vừa áp dụng vào việc đang làm, thay vì học hết lý thuyết mới thực hành:

  • Viết script tự động hoá thao tác Docker Compose cho các container (sunex-wiki-system, MinIO, v.v.)
  • Script wrapper cho tshark/tcpdump để lọc và log traffic GTPv2-C/Diameter theo điều kiện
  • Script backup/rotate log, kiểm tra healthcheck cho PostgreSQL/MinIO
  • Script parse output tshark -T fields thành CSV để phân tích tiếp bằng Python/pandas

Giai đoạn 6 — Advanced thực sự

Không cần học tuần tự — dùng như “tra cứu theo nhu cầu” khi viết script thực tế và gặp vấn đề cụ thể.

Process & job control

  • Background job (&, jobs, fg, bg, disown, nohup)
  • Subshell vs current shell (() vs {}), tác động đến biến/scope
  • wait để đồng bộ nhiều process chạy song song
  • Named pipe (FIFO) với mkfifo — hữu ích khi cần pipe dữ liệu giữa 2 process không liên quan trực tiếp

Parallel processing / performance

  • xargs -P để chạy song song
  • parallel (GNU parallel) nếu cần xử lý hàng loạt file capture lớn
  • Tối ưu subprocess spawn (tránh gọi awk/grep lặp lại trong loop — antipattern rất phổ biến)

String/data nâng cao

  • Parameter expansion đầy đủ: ${var:-default}, ${var:=default}, ${var:+alt}, ${var:offset:length}, ${var/pattern/replace}, ${var^^} ${var,,} (uppercase/lowercase)
  • Heredoc (<<EOF) và herestring (<<<)
  • printf thay vì echo khi cần format chính xác (đặc biệt in hex/binary data từ capture)

Error handling & robustness cấp production

  • trap với ERR signal để log lỗi có context
  • Script template chuẩn: set -euo pipefail + trap cleanup EXIT + lockfile chống chạy trùng (flock)
  • Structured logging trong script (timestamp, log level, ghi ra file + stdout)

Tương tác hệ thống sâu

  • Đọc/parse /proc, /sys — hữu ích khi debug network namespace, interface
  • Named file descriptor tùy chỉnh (exec 3<>/dev/tcp/host/port) — bash có thể mở raw TCP socket không cần nc, khá hay để biết cho việc test nhanh giao thức
  • flock cho concurrency control khi nhiều script/cron chạy cùng lúc

Bảo mật khi viết script

  • Tránh injection khi nhận input từ file/argument (đặc biệt nếu script build command string rồi eval)
  • IFS handling khi loop qua filename có khoảng trắng
  • ShellCheck ở mức strict, hiểu rõ tại sao nó cảnh báo từng lỗi

Tài nguyên gợi ý

  • man bash và đặc biệt phần PARAMETER EXPANSION — tham khảo lại nhiều hơn là đọc hết 1 lần
  • ShellCheck (linter) — cài ngay từ đầu, dạy best practice qua từng lỗi nó báo
  • “Advanced Bash-Scripting Guide” (TLDP) để tra cứu khi cần specific case
Contact
Facebook
TOP