Shell scripting là dạng lập trình dễ học/làm nhất trên Linux. Hơn nữa, đây là kỹ năng bắt buộc cho quản trị hệ thống để tự động hóa tác vụ, phát triển tiện ích/công cụ đơn giản mới, chỉ nêu vài ví dụ.
Trong bài này, chúng tôi sẽ chia sẻ 10 mẹo hữu ích và thực tế để viết bash script hiệu quả và đáng tin cậy, bao gồm:
1. Luôn Sử Dụng Chú Thích Trong Script
Đây là thực hành khuyến nghị không chỉ áp dụng cho shell scripting mà cho tất cả các loại lập trình. Viết chú thích trong script giúp bạn hoặc người khác đọc script hiểu được các phần khác nhau của script làm gì.
Đối với người mới bắt đầu, chú thích được định nghĩa bằng dấu #.
#TecMint là trang web tốt nhất cho mọi loại bài viết Linux
2. Làm Script Thoát Khi Lệnh Thất Bại
Đôi khi bash có thể tiếp tục thực thi script ngay cả khi một lệnh nhất định thất bại, từ đó ảnh hưởng đến phần còn lại của script (có thể dẫn đến lỗi logic). Dùng dòng sau để thoát script khi lệnh thất bại:
#cho script thoát nếu lệnh thất bại set -o errexit OR set -e
3. Làm Script Thoát Khi Bash Dùng Biến Chưa Khai Báo
Bash cũng có thể cố gắng dùng biến chưa khai báo trong script, điều này có thể gây lỗi logic. Do đó dùng dòng sau để chỉ thị bash thoát script khi nó cố gắng dùng biến chưa khai báo:
#cho script thoát nếu biến chưa dùng được sử dụng set -o nounset OR set -u
4. Dùng Ngoặc Kép Để Tham Chiếu Biến
Sử dụng ngoặc kép khi tham chiếu (dùng giá trị của biến) giúp ngăn chặn tách từ (liên quan đến khoảng trắng) và globbing không cần thiết (nhận diện và mở rộng ký tự đại diện).
Xem ví dụ dưới đây:
#!/bin/bash #cho script thoát nếu lệnh thất bại set -o errexit #cho script thoát nếu biến chưa dùng được sử dụng set -o nounset echo "Names without double quotes" echo names="Tecmint FOSSMint Linusay" for name in $names; do echo "$name" done echo echo "Names with double quotes" echo for name in "$names"; do echo "$name" done exit 0
Lưu tệp và thoát, sau đó chạy như sau:
$ ./names.sh
5. Sử Dụng Hàm Trong Script
Trừ script rất nhỏ (vài dòng code), luôn nhớ dùng hàm để module hóa code và làm cho script dễ đọc và tái sử dụng hơn.
Cú pháp viết hàm như sau:
function check_root(){
command1;
command2;
}
OR
check_root(){
command1;
command2;
}
Đối với code một dòng, dùng ký tự kết thúc sau mỗi lệnh như này:
check_root(){ command1; command2; }
6. Dùng = Thay Vì == Cho So Sánh Chuỗi
Lưu ý == là từ đồng nghĩa của =, do đó chỉ dùng đơn = cho so sánh chuỗi, ví dụ:
value1="tecmint.com" value2="fossmint.com" if [ "$value1" = "$value2" ]
7. Dùng $(command) Thay Vì `command` Cũ Cho Thay Thế Lệnh
Thay thế lệnh (command substitution) thay thế một lệnh bằng đầu ra của nó. Dùng $(command) thay vì backquotes `command` cho thay thế lệnh.
Điều này được khuyến nghị ngay cả bởi công cụ shellcheck (hiển thị cảnh báo và gợi ý cho shell script). Ví dụ:
user=`echo "$UID"` user=$(echo "$UID")
8. Dùng Read-only Để Khai Báo Biến Tĩnh
Một biến tĩnh không thay đổi; giá trị của nó không thể thay đổi sau khi đã định nghĩa trong script:
readonly passwd_file="/etc/passwd" readonly group_file="/etc/group"
9. Dùng Chữ HOA Cho BIẾN MÔI TRƯỜNG Và Chữ Thường Cho Biến Tùy Chỉnh
Tất cả biến môi trường bash được đặt tên bằng chữ HOA, do đó dùng chữ thường để đặt tên biến tùy chỉnh của bạn để tránh xung đột tên biến:
#định nghĩa biến tùy chỉnh dùng chữ thường và dùng chữ HOA cho biến env nikto_file="$HOME/Downloads/nikto-master/program/nikto.pl" perl "$nikto_file" -h "$1"
10. Luôn Thực Hiện Gỡ Lỗi Cho Script Dài
Nếu bạn viết bash script với hàng nghìn dòng code, tìm lỗi có thể trở thành ác mộng. Để dễ dàng sửa chữa trước khi thực thi script, hãy thực hiện một số gỡ lỗi. Làm chủ mẹo này bằng cách đọc qua các hướng dẫn dưới đây:
- Cách Bật Chế Độ Gỡ Lỗi Shell Script Trên Linux
- Cách Thực Hiện Kiểm Tra Cú Pháp Chế Độ Gỡ Lỗi Trong Shell Script
- Cách Theo Dõi Thực Thi Lệnh Trong Shell Script Với Shell Tracing
Đó là tất cả! Bạn có bất kỳ thực hành hay về bash scripting nào khác để chia sẻ? Nếu có, hãy dùng mẫu bình luận bên dưới để làm điều đó.