Bash là một môi trường dòng lệnh phong phú với nhiều tùy chọn lập trình, cùng một ngôn ngữ hướng dẫn cực kỳ linh hoạt. Có rất nhiều tính năng và hành vi đặc trưng của Bash dễ bị bỏ sót nếu không được khai thác kỹ lưỡng, vì vậy chuỗi bài viết này được tạo ra nhằm giới thiệu đến bạn những mẹo, thủ thuật, ví dụ thực tế và cả những “cạm bẫy” dễ gặp khi sử dụng Bash.
DataOnline sẽ hướng dẫn bạn cách học :
- Các mẹo, thủ thuật và phương pháp hữu ích của dòng lệnh Bash
- Cách tương tác với dòng lệnh Bash theo phong cách nâng cao
- Cách rèn luyện kỹ năng Bash tổng thể để trở thành người dùng chuyên nghiệp hơn
Yêu cầu phần mềm và quy ước sử dụng
Danh mục | Yêu cầu, quy ước hoặc phiên bản phần mềm sử dụng |
---|---|
Hệ thống | Linux – không phụ thuộc vào bản phân phối |
Phần mềm | Bash command line, hệ điều hành nền tảng Linux |
Khác | Bất kỳ tiện ích nào không có sẵn trong Bash đều có thể được cài đặt bằng sudo apt-get install utility-name (hoặc yum install trên các hệ thống dựa trên RedHat) |
Các quy ước
#
– các lệnh cần thực thi với quyền root hoặc sử dụngsudo
$
– các lệnh thực thi với quyền người dùng thông thường
Ví dụ 1: Kiểm tra chính xác sự tồn tại của thư mục hoặc tệp tin
Chúng ta có thể kiểm tra xem một thư mục có tồn tại hay không một cách đơn giản bằng cách sử dụng điều kiện -d
(kiểm tra xem thư mục với tên được chỉ định có tồn tại không) trong một câu lệnh if
:
$ MYPATHTOCHECKFOREXISTENCE="${PWD}" $ echo "${MYPATHTOCHECKFOREXISTENCE}" /home/roel/iamhappy $ if [ -d ${MYPATHTOCHECKFOREXISTENCE} ]; then echo "Exists!"; fi Exists!
Tuy nhiên, cũng rất dễ phạm lỗi khó phát hiện trong Bash. Cùng xem thử ví dụ sau và xem bạn có phát hiện ra lỗi không nhé:
$ MYPATHTOCHECKFOREXISTANCE="/doesnotreallyexist" $ if [ -d ${MYPATHTOCHECKFOREXISTENCE} ]; then echo "Exists!"; fi Exists! $ ls /doesnotreallyexist ls: cannot access '/doesnotreallyexist': No such file or directory
Tại sao lệnh if
lại báo thư mục tồn tại, trong khi thực tế thì không? Bạn có nhận ra lỗi không?
Lỗi ở đây là do nhầm tên biến: EXISTANCE thay vì EXISTENCE.
Có thể đây là một trò đùa nhỏ, nhưng thực tế cho thấy đây là một “cạm bẫy” rất dễ gặp phải trong Bash:
$ if [ -d ]; then echo "Exists!"; fi Exists!
Và thậm chí đáng chú ý hơn:
$ VAR1=''; if [ -d ${VAR1} ]; then echo "Exists!"; fi Exists!
Vậy đó, nếu bạn quên gán giá trị cho biến thư mục hoặc gõ sai tên biến, thì Bash sẽ mặc định hiểu như thể thư mục tồn tại! Đây là một ngoại lệ thú vị mà trong tài liệu chính thức (man bash) cũng không đề cập rõ ràng – chỉ nói rằng điều kiện -d
trả về đúng nếu tệp tồn tại và là thư mục.
Ví dụ 2: Cách tốt hơn để kiểm tra thư mục hoặc tệp tin có tồn tại
Giải pháp thật ra rất đơn giản: bọc tên biến bằng dấu nháy kép " "
để tránh Bash tự động phân tích sai:
$ VAR1=''; if [ -d "${VAR1}" ]; then echo "Exists!"; fi $
Một cách tiếp cận đơn giản nhưng cực kỳ hiệu quả. Bằng việc sử dụng dấu nháy kép, Bash sẽ phân tích câu lệnh if
thành [ -d "" ]
thay vì [ -d ]
, và kết quả sẽ là false nếu biến rỗng. Nhờ đó, đoạn mã trong phần then
sẽ không được thực thi – tránh được hiểu lầm rằng thư mục “trống” vẫn tồn tại.
Một điểm thú vị khác là: tại sao Bash lại mặc định cho [ -d ]
là true? Có thể bạn sẽ có một góc nhìn sâu sắc hơn – hãy chia sẻ cùng chúng tôi nhé!
Ví dụ 3: Bạn từng muốn trích xuất nội dung từ file .deb
chưa?
Đôi khi hệ thống gặp trục trặc và bạn cần truy xuất một file cụ thể nằm bên trong gói .deb
. Các file .deb
(dạng gói cài đặt của Debian, cũng được dùng bởi Ubuntu và Mint) có thể được tải dễ dàng từ internet, nhưng không phải ai cũng biết cách trích xuất nội dung từ chúng.
Để làm điều đó, bạn chỉ cần:
ar x some_deb_file.deb tar -xf data.tar.xz
Công cụ ar
– theo tài liệu (man ar
) – dùng để tạo, sửa và giải nén các file archive. Hai lệnh trên sẽ giải nén nội dung bên trong gói .deb
.
Thông thường, một file .deb
sẽ bao gồm hai archive: control.tar.xz
và data.tar.xz
. Và như bạn thấy, chính file data.tar.xz
mới là nơi chứa nội dung thực sự – file mà bạn cần trích xuất để truy cập dữ liệu bên trong.
Kết luận
Trong bài viết này, chúng ta đã tìm hiểu cách kiểm tra sự tồn tại của thư mục và tệp tin một cách chính xác trong Bash – bao gồm việc sử dụng dấu nháy kép đúng cách và phòng tránh lỗi thường gặp khi gán biến. Bên cạnh đó, bạn cũng đã học được cách trích xuất nội dung từ một gói .deb
bằng hai công cụ tiện dụng là ar
và tar
.
Như mọi khi, đừng quên kiểm tra kỹ các script của bạn và thử nghiệm trong nhiều kịch bản khác nhau để đảm bảo tính ổn định.
Chúc bạn tiếp tục khám phá và tận hưởng niềm vui từ Bash – công cụ quyền lực của dân IT!
Đừng ngần ngại để lại bình luận bên dưới để chia sẻ trải nghiệm hoặc góc nhìn chuyên sâu của bạn nhé!
Các ví dụ về mẹo và thủ thuật dòng lệnh Bash hữu ích – Phần 1
Các ví dụ về mẹo và thủ thuật dòng lệnh Bash hữu ích – Phần 2
Các ví dụ về mẹo và thủ thuật dòng lệnh Bash hữu ích – Phần 3
Các ví dụ về mẹo và thủ thuật dòng lệnh Bash hữu ích – Phần 4
Các ví dụ về mẹo và thủ thuật dòng lệnh Bash hữu ích – Phần 5