Bạn đã bao giờ cảm thấy mệt mỏi khi phải lặp đi lặp lại những câu lệnh giống nhau trên Linux mỗi ngày? Bash là gì, shell mặc định trên hầu hết các bản phân phối Linux, chính là công cụ mạnh mẽ giúp bạn giải quyết vấn đề này. Nó không chỉ là một giao diện dòng lệnh mà còn là một ngôn ngữ lập trình, cho phép bạn tự động hóa các công việc từ đơn giản đến phức tạp thông qua các tập lệnh, hay còn gọi là Bash script. Việc sử dụng Bash script giúp tiết kiệm thời gian, giảm thiểu sai sót do thao tác thủ công và nâng cao hiệu suất làm việc một cách đáng kể.

Tuy nhiên, nhiều người dùng mới chuyển sang Linux thường cảm thấy bỡ ngỡ và không biết bắt đầu từ đâu. Làm thế nào để viết một tập lệnh Bash? Cách chạy nó ra sao? Cần những quyền gì để script có thể hoạt động? Đây là những câu hỏi phổ biến mà bất kỳ ai cũng gặp phải khi bắt đầu. Sự thiếu hiểu biết về cách thức hoạt động của Bash có thể dẫn đến những lỗi không đáng có và làm giảm đi sự hứng thú khám phá hệ điều hành mạnh mẽ này.
Đừng lo lắng, bài viết này của AZWEB sẽ là kim chỉ nam dành cho bạn. Chúng tôi sẽ hướng dẫn chi tiết từng bước, từ cách chạy một lệnh Bash đơn lẻ trực tiếp trong terminal, cách tạo và thực thi một file script hoàn chỉnh, cho đến việc thiết lập quyền truy cập cần thiết. Không chỉ vậy, bài viết còn cung cấp các ví dụ thực tế và những lưu ý quan trọng về bảo mật để bạn có thể tự tin sử dụng Bash một cách an toàn và hiệu quả nhất. Hãy cùng bắt đầu hành trình chinh phục Bash scripting và biến những công việc nhàm chán trở nên tự động hoàn toàn!
Cách chạy lệnh Bash trực tiếp trong terminal
Cách đơn giản và nhanh nhất để tương tác với Bash là thông qua terminal. Đây là nơi bạn có thể gõ các lệnh và hệ thống sẽ thực thi ngay lập tức, cung cấp một phương pháp hiệu quả để thực hiện các tác vụ nhanh mà không cần tạo file script.
Sử dụng terminal để chạy lệnh ngay lập tức
Trước tiên, bạn cần mở cửa sổ terminal. Trên hầu hết các bản phân phối Linux (như Ubuntu, Fedora, hay CentOS), bạn có thể tìm thấy ứng dụng “Terminal” trong menu hoặc sử dụng tổ hợp phím tắt Ctrl + Alt + T. Khi cửa sổ terminal hiện ra, bạn sẽ thấy một dấu nhắc lệnh, sẵn sàng để bạn nhập lệnh.

Hãy thử một vài lệnh Bash cơ bản để làm quen. Ví dụ, gõ ls và nhấn Enter. Lệnh này sẽ liệt kê tất cả các file và thư mục trong thư mục hiện tại của bạn. Muốn biết mình đang ở đâu trong cây thư mục? Gõ pwd (print working directory), terminal sẽ hiển thị đường dẫn đầy đủ của thư mục hiện tại. Để in một dòng chữ ra màn hình, bạn có thể dùng lệnh echo. Ví dụ, echo "Chào mừng đến với AZWEB!" sẽ hiển thị chính xác dòng chữ đó. Mỗi lệnh này là một chương trình nhỏ, và terminal là cầu nối để bạn ra lệnh cho chúng hoạt động.
Chạy nhiều lệnh trong một dòng
Đôi khi bạn muốn thực thi một chuỗi các lệnh theo thứ tự. Thay vì gõ từng lệnh và chờ nó hoàn thành, bạn có thể kết hợp chúng trên cùng một dòng bằng cách sử dụng dấu chấm phẩy (;). Bash sẽ thực thi các lệnh tuần tự từ trái sang phải, bất kể lệnh trước đó thành công hay thất bại.

Hãy xem một ví dụ thực tế. Giả sử bạn muốn tạo một thư mục mới có tên là du-an, di chuyển vào bên trong thư mục đó, và sau đó liệt kê nội dung (lúc này sẽ trống). Bạn có thể viết tất cả trên một dòng như sau: mkdir du-an; cd du-an; ls. Đầu tiên, mkdir du-an sẽ được thực thi để tạo thư mục. Ngay sau khi hoàn thành, cd du-an sẽ chạy để chuyển bạn vào thư mục mới. Cuối cùng, ls sẽ được gọi để hiển thị nội dung. Kỹ thuật này rất hữu ích khi bạn muốn thực hiện nhanh một chuỗi các thao tác liên quan mà không cần phải chờ đợi và gõ lệnh nhiều lần.
Cách thực thi file script Bash
Khi các tác vụ trở nên phức tạp hơn hoặc cần được thực hiện thường xuyên, việc gõ lại từng lệnh trong terminal sẽ không còn hiệu quả. Đây là lúc các file script Bash phát huy tác dụng. Một file script là một tệp văn bản chứa một chuỗi các lệnh sẽ được thực thi tuần tự.
Tạo và viết nội dung file script
Để tạo một file script, bạn có thể sử dụng bất kỳ trình soạn thảo văn bản nào trong terminal như nano hoặc vi. nano thường thân thiện với người mới bắt đầu hơn. Ví dụ, để tạo một file có tên chao.sh, bạn gõ lệnh: nano chao.sh. Thao tác này sẽ mở trình soạn thảo nano.

Điều quan trọng nhất khi bắt đầu một script Bash là dòng đầu tiên, được gọi là “shebang”. Dòng này luôn là #!/bin/bash. Nó chỉ cho hệ điều hành biết rằng tệp này nên được thực thi bằng trình thông dịch Bash. Nếu thiếu dòng này, hệ thống có thể không biết cách chạy script của bạn một cách chính xác. Sau dòng shebang, bạn có thể viết các lệnh Bash như bình thường, mỗi lệnh trên một dòng. Ví dụ, một script đơn giản có thể trông như sau:
#!/bin/bash
echo "Chào các bạn!"
echo "Đây là script đầu tiên của tôi trên Linux."
pwd
Sau khi viết xong, bạn nhấn Ctrl + X để thoát nano, sau đó nhấn Y để xác nhận lưu và Enter để giữ nguyên tên file.
Thực thi file script trên terminal
Có hai cách chính để chạy một file script Bash. Cách đầu tiên là gọi trực tiếp trình thông dịch Bash và truyền tên file script làm đối số. Với file chao.sh vừa tạo, bạn có thể chạy nó bằng lệnh: bash chao.sh. Terminal sẽ đọc nội dung file và thực thi từng lệnh một. Cách này không đòi hỏi file script phải có quyền thực thi.

Cách thứ hai, và cũng là cách phổ biến hơn, là chạy script như một chương trình độc lập. Để làm được điều này, trước tiên bạn cần cấp quyền thực thi cho file. Sau khi đã cấp quyền (chúng ta sẽ tìm hiểu chi tiết ở phần sau), bạn có thể chạy script bằng cách gõ ./script.sh. Dấu ./ ở phía trước là cần thiết để chỉ cho shell biết rằng file bạn muốn chạy nằm ngay trong thư mục hiện tại. Ví dụ, sau khi cấp quyền cho file chao.sh, bạn chỉ cần gõ ./chao.sh và nhấn Enter, script sẽ được thực thi ngay lập tức.
Thiết lập quyền thực thi cho tập lệnh Bash
Trong môi trường Linux, mọi thứ đều là file, và mỗi file đều có một bộ quyền truy cập đi kèm. Đây là một cơ chế bảo mật cốt lõi, giúp kiểm soát ai có thể làm gì với file. Để chạy một script Bash trực tiếp bằng cách gọi tên nó (./script.sh), bạn bắt buộc phải cấp cho nó quyền thực thi.
Hiểu về quyền truy cập trong Linux
Hệ thống quyền của Linux xoay quanh ba hành động cơ bản: đọc (read – r), ghi (write – w), và thực thi (execute – x). Các quyền này được áp dụng cho ba đối tượng: chủ sở hữu file (user – u), nhóm sở hữu file (group – g), và những người dùng khác (others – o). Khi bạn dùng lệnh ls -l, bạn sẽ thấy một chuỗi ký tự như -rwxr-xr--.

Chuỗi này biểu thị quyền của file. Ký tự đầu tiên cho biết loại file (dấu - là file thông thường). Chín ký tự tiếp theo được chia thành ba nhóm: rwx cho chủ sở hữu, r-x cho nhóm, và r-- cho người khác. Trong ví dụ này, chủ sở hữu có quyền đọc, ghi và thực thi; thành viên trong nhóm có quyền đọc và thực thi; những người còn lại chỉ có quyền đọc. Khi bạn tạo một file script mới, mặc định nó sẽ không có quyền thực thi (x).
Cách cấp quyền thực thi cho file script
Lệnh được sử dụng để thay đổi quyền của file là chmod (change mode). Để cấp quyền thực thi cho một file script, cách đơn giản nhất là sử dụng toán tử +x. Thao tác này sẽ thêm quyền thực thi cho cả chủ sở hữu, nhóm và những người khác. Ví dụ, để cấp quyền thực thi cho file chao.sh đã tạo ở phần trước, bạn dùng lệnh: chmod +x chao.sh.

Sau khi chạy lệnh này, bạn có thể kiểm tra lại quyền bằng lệnh ls -l chao.sh. Bạn sẽ thấy các ký tự x xuất hiện trong chuỗi quyền, và tên file có thể sẽ đổi màu trong terminal để báo hiệu rằng nó là một file có thể thực thi. Bây giờ, file script của bạn đã sẵn sàng để được chạy trực tiếp bằng cú pháp ./chao.sh. Việc hiểu và sử dụng chmod là một kỹ năng nền tảng và cực kỳ quan trọng đối với bất kỳ ai làm việc thường xuyên trên Linux.
Các lưu ý khi chạy lệnh Bash để đảm bảo an toàn và hiệu quả
Sức mạnh của Bash scripting đi kèm với trách nhiệm. Một tập lệnh có thể thực hiện các thay đổi lớn trên hệ thống, vì vậy việc tuân thủ các nguyên tắc an toàn và tối ưu là vô cùng quan trọng để tránh những sự cố không mong muốn và đảm bảo script hoạt động hiệu quả.
Tránh chạy script từ nguồn không rõ ràng
Đây là quy tắc vàng trong bảo mật. Một tập lệnh Bash tải về từ internet hoặc nhận từ một nguồn không đáng tin cậy có thể chứa các lệnh độc hại. Ví dụ, một script có thể chứa lệnh rm -rf / sẽ cố gắng xóa toàn bộ hệ thống file của bạn. Trước khi chạy bất kỳ script nào không phải do chính bạn viết, hãy luôn mở nó ra bằng một trình soạn thảo văn bản và đọc kỹ từng dòng lệnh để hiểu nó đang làm gì. Đừng bao giờ thực thi một script nếu bạn không hoàn toàn tin tưởng vào nguồn gốc và nội dung của nó.

Sử dụng biến và kiểm tra lỗi trong script
Để script của bạn linh hoạt và dễ bảo trì hơn, hãy sử dụng biến để lưu trữ các giá trị có thể thay đổi, chẳng hạn như tên file hoặc đường dẫn thư mục. Thay vì viết cứng một giá trị ở nhiều nơi, bạn chỉ cần định nghĩa nó một lần qua biến và sử dụng lại. Ví dụ: OUTPUT_DIR="/home/user/backup".
Việc kiểm tra lỗi cũng rất quan trọng. Một lệnh trong script có thể thất bại vì nhiều lý do (ví dụ: file không tồn tại, không đủ quyền). Bạn có thể sử dụng các cấu trúc điều kiện như if để kiểm tra mã thoát (exit code) của lệnh trước đó. Một mã thoát bằng 0 thường có nghĩa là thành công, trong khi bất kỳ giá trị nào khác đều chỉ ra lỗi. Bằng cách thêm các bước kiểm tra đơn giản, bạn có thể làm cho script của mình dừng lại và báo lỗi thay vì tiếp tục chạy và gây ra những hậu quả khó lường. Về mặt hiệu suất, hãy ưu tiên các lệnh tích hợp sẵn của shell thay vì gọi các chương trình bên ngoài khi có thể, vì điều này giúp giảm chi phí khởi tạo tiến trình mới.
Ví dụ minh họa các câu lệnh Bash cơ bản
Lý thuyết sẽ trở nên dễ hiểu hơn rất nhiều khi đi kèm với các ví dụ thực tế. Dưới đây là một số script Bash cơ bản giúp bạn hình dung rõ hơn về cách chúng hoạt động và những gì bạn có thể làm với chúng.
1. In ra câu “Hello, World!”
Đây là ví dụ kinh điển nhất trong lập trình. Nó giúp bạn xác nhận rằng môi trường của mình đã sẵn sàng.
Tạo file hello.sh:
#!/bin/bash
# Đây là một comment, nó sẽ không được thực thi
echo "Hello, World!"
Sau khi lưu, cấp quyền chmod +x hello.sh và chạy bằng ./hello.sh, bạn sẽ thấy dòng chữ “Hello, World!” xuất hiện trên terminal.
2. Tạo thư mục mới và di chuyển vào đó
Ví dụ này minh họa cách thực hiện các thao tác với hệ thống file.
Tạo file tao_thu_muc.sh:
#!/bin/bash
TEN_THU_MUC="project_moi"
echo "Dang tao thu muc ten la: $TEN_THU_MUC"
mkdir $TEN_THU_MUC
echo "Da tao xong. Dang di chuyen vao thu muc..."
cd $TEN_THU_MUC
echo "Thu muc hien tai la:"
pwd
Khi chạy script này, nó sẽ tạo một thư mục tên project_moi và sau đó hiển thị đường dẫn hiện tại để xác nhận nó đã di chuyển vào bên trong.
3. Vòng lặp for đơn giản để in số từ 1 đến 5
Bash cũng hỗ trợ các cấu trúc vòng lặp, cho phép bạn thực hiện một hành động nhiều lần.
Tạo file vong_lap.sh:
#!/bin/bash
echo "Bat dau vong lap..."
for i in {1..5}
do
echo "So hien tai la: $i"
done
echo "Ket thuc vong lap."
Kết quả sẽ là các dòng chữ “So hien tai la: 1”, “So hien tai la: 2”, và cứ thế cho đến 5.
4. Đọc biến đầu vào từ người dùng
Script của bạn có thể tương tác với người dùng bằng cách yêu cầu họ nhập thông tin.
Tạo file hoi_ten.sh:
#!/bin/bash
echo "Vui long nhap ten cua ban:"
read ten_nguoi_dung
echo "Xin chao, $ten_nguoi_dung! Chuc ban mot ngay tot lanh."
Khi chạy, script sẽ dừng lại và đợi bạn nhập tên, sau đó nhấn Enter. Cuối cùng, nó sẽ in ra một lời chào cá nhân hóa. Những ví dụ này chỉ là bước khởi đầu, nhưng chúng cho thấy khả năng tự động hóa mạnh mẽ của Bash.

Các vấn đề thường gặp khi chạy lệnh Bash
Khi mới bắt đầu, bạn chắc chắn sẽ gặp phải một vài lỗi phổ biến. Hiểu rõ nguyên nhân và cách khắc phục chúng sẽ giúp bạn tiết kiệm rất nhiều thời gian và tránh được sự nản lòng. Dưới đây là hai trong số những lỗi thường gặp nhất.
Lỗi “Permission denied” khi chạy script
Đây có lẽ là lỗi mà người mới gặp phải nhiều nhất. Bạn đã viết xong một script hoàn hảo, bạn cố gắng chạy nó bằng lệnh ./ten_script.sh, và terminal trả về một thông báo lạnh lùng: bash: ./ten_script.sh: Permission denied.

Nguyên nhân của lỗi này rất đơn giản: file script của bạn chưa có quyền thực thi (execute permission). Như đã đề cập ở phần trước, vì lý do bảo mật, các file văn bản mới tạo trên Linux mặc định không được phép chạy như một chương trình. Hệ điều hành đang ngăn bạn lại để đảm bảo bạn thực sự muốn thực thi file này.
Cách khắc phục cũng vô cùng nhanh chóng. Bạn chỉ cần sử dụng lệnh chmod để cấp quyền thực thi cho file. Lệnh đơn giản nhất là: chmod +x ten_script.sh Lệnh này sẽ thêm quyền thực thi (x) cho tất cả các nhóm người dùng (chủ sở hữu, nhóm, và người khác). Sau khi chạy lệnh này, hãy thử thực thi lại script bằng ./ten_script.sh, và lần này nó sẽ hoạt động như mong đợi.
Script không chạy do thiếu dòng khai báo shell #!/bin/bash
Một vấn đề khác có thể xảy ra là script của bạn chạy nhưng lại cho ra kết quả không mong muốn hoặc báo lỗi cú pháp lạ, mặc dù các lệnh có vẻ đúng. Đôi khi, lỗi này xuất phát từ việc thiếu dòng “shebang” ở đầu file. Dòng #!/bin/bash không phải là một comment thông thường. Nó là một chỉ thị đặc biệt cho hệ điều hành, cho biết rằng các lệnh bên dưới nên được diễn giải và thực thi bởi trình thông dịch Bash, đặt tại đường dẫn /bin/bash.
Nếu bạn bỏ qua dòng này, hệ thống có thể sẽ sử dụng shell mặc định của người dùng hiện tại (có thể là sh, zsh, fish…) để chạy script. Mỗi shell có thể có cú pháp và các tính năng hơi khác nhau. Một cú pháp hoạt động tốt trong Bash có thể không hợp lệ trong một shell khác, dẫn đến lỗi.
Cách khắc phục rất dễ dàng: hãy luôn đảm bảo rằng dòng đầu tiên trong mọi file script Bash của bạn là #!/bin/bash. Thói quen này sẽ đảm bảo tính nhất quán và giúp script của bạn hoạt động đáng tin cậy trên nhiều môi trường khác nhau. Nếu script hiện tại của bạn đang bị lỗi, hãy mở nó ra, thêm dòng này vào đầu file, lưu lại và thử chạy một lần nữa.
Best Practices
Luôn kiểm tra quyền trước khi chạy script: Trước khi thực thi một script, đặc biệt là script có khả năng thay đổi hệ thống, hãy dùng ls -l để kiểm tra quyền của nó. Điều này giúp đảm bảo rằng chỉ những người dùng được phép mới có thể chạy script, tránh các hành động vô tình hoặc trái phép.
Viết comment rõ ràng trong file script: Script của bạn hôm nay có thể rất dễ hiểu, nhưng sau sáu tháng nữa, chính bạn cũng có thể không nhớ tại sao mình lại viết một dòng lệnh phức tạp nào đó. Hãy sử dụng dấu # để thêm các bình luận giải thích mục đích của các khối lệnh, các biến quan trọng, hoặc bất kỳ logic phức tạp nào. Điều này cực kỳ hữu ích cho việc bảo trì và cộng tác với người khác.
Tránh chạy tập lệnh từ nguồn không tin cậy: Đây là một lời nhắc lại về bảo mật nhưng vô cùng quan trọng. Đừng bao giờ tải và chạy một script từ một trang web lạ hoặc một nguồn mà bạn không tin tưởng tuyệt đối. Luôn kiểm tra nội dung của script trước khi thực thi nó trên máy của bạn.
Thường xuyên backup script quan trọng: Nếu bạn có những script tự động hóa các tác vụ quan trọng như sao lưu dữ liệu, triển khai ứng dụng, hãy đảm bảo bạn có một bản sao lưu của chúng. Sử dụng các hệ thống quản lý phiên bản như Git là một cách tuyệt vời để lưu trữ và theo dõi các thay đổi trong script của bạn.
Kiểm tra kỹ biến và logic trong script để tránh lỗi: Luôn bao quanh tên biến bằng dấu ngoặc kép (ví dụ: echo "$TEN_FILE") để xử lý đúng các trường hợp tên file có chứa khoảng trắng hoặc ký tự đặc biệt. Sử dụng set -e ở đầu script để nó tự động thoát ngay khi có một lệnh nào đó thất bại, giúp ngăn chặn các lỗi dây chuyền không mong muốn.
Kết luận
Qua bài viết này, chúng ta đã cùng nhau khám phá những kiến thức nền tảng nhưng vô cùng quan trọng về cách chạy tập lệnh Bash trên Linux. Từ việc thực thi các lệnh đơn lẻ trực tiếp trong terminal, tạo và chạy một file script hoàn chỉnh, cho đến việc hiểu và thiết lập quyền thực thi với lệnh chmod, bạn đã có trong tay những công cụ cần thiết để bắt đầu hành trình tự động hóa công việc của mình. Việc nắm vững các kỹ năng này không chỉ giúp bạn làm việc hiệu quả hơn mà còn mở ra một thế giới mới về khả năng kiểm soát và tùy biến hệ điều hành Linux.
Hãy nhớ rằng, chìa khóa để thành thạo Bash scripting chính là thực hành. Đừng ngần ngại tự tạo ra các script nhỏ để giải quyết những công việc hàng ngày của bạn, chẳng hạn như tự động sao lưu một thư mục, dọn dẹp các file tạm, hoặc đổi tên hàng loạt file. Mỗi script bạn viết, mỗi lỗi bạn sửa sẽ là một bước tiến giúp bạn hiểu sâu hơn về sức mạnh của dòng lệnh.
Hành trình học hỏi không bao giờ kết thúc. Bash là một công cụ cực kỳ rộng lớn với vô vàn tính năng nâng cao. AZWEB khuyến khích bạn tiếp tục tìm hiểu sâu hơn về các chủ đề như biến, vòng lặp, câu lệnh điều kiện, và các hàm trong Bash. Chúng tôi sẽ tiếp tục cung cấp những bài viết chuyên sâu hơn để đồng hành cùng bạn trên con đường trở thành một chuyên gia Linux. Chúc bạn thành công!