Bash Input là cách bạn cung cấp lệnh và dữ liệu cho Bash shell – một chương trình phổ biến trên các hệ điều hành như Linux và macOS, cho phép bạn điều khiển máy tính bằng dòng lệnh. Bash shell sẽ tiếp nhận thông tin đầu vào, tìm hiểu ý định và thực hiện yêu cầu của bạn. Hãy cùng Vietnix tìm hiểu chi tiết hơn về Bash Input trong bài viết sau đây.
Bash Input có nguồn gốc từ đâu?
Khi nói đến môi trường Bash, bạn có thể nghĩ ngay đến Input là những dữ liệu mà script nhận vào để xử lý. Thực tế khi thực hiện, Input có thể được thu thập từ nhiều nguồn thông tin dữ liệu khác nhau như:
- Environment variables: Những thông tin được tạo ra khi Bash Script bắt đầu hoạt động và có thể được sử dụng trong quá trình thực thi script.
- Command-line arguments: Khi thực hiện một Bash Script, những giá trị này được gửi vào script và thường được lưu trữ trong các positional parameters (tham số vị trí).
- Files: Bash Script có khả năng đọc dữ liệu từ các file và trích xuất thông tin cần thiết từ các file này để xử lý.
- File Descriptors: Cách để bạn có thể truy cập các nguồn dữ liệu khác nhau như pipes, terminal, socket,…
Tóm lại, Bash shell có khả năng tiếp nhận thông tin đầu vào từ nhiều nguồn khác nhau sẽ được gọi là Bash Input. Việc nắm vững các nguồn dữ liệu sẽ giúp bạn khai thác tối đa sức mạnh của Bash Script trong việc tự động hóa các tác vụ trên hệ thống.
Bash ngoài khả năng là một shell (môi trường dòng lệnh) còn có vai trò là một lệnh trên hệ điều hành Linux. Bạn có thêm xem qua lệnh bash và cách chạy tập lệnh bash nếu như đây là lần đầu bạn biết đến Bash Script.
Ngoài ra, để hiểu rõ hơn về Bash Shell, mời bạn tham khảo Bash có phải là ngôn ngữ lập trình để tự giải đáp những thắc mắc về môi trường dòng lệnh trong quá trình tìm hiểu.
Cách hoạt động của input trong Bash Script
Bash Script là một chuỗi các dòng lệnh được viết trong một tệp. Nhóm lệnh này được đọc và thực hiện bởi chương trình bash shell. Chương trình sẽ thực hiện từng dòng lệnh.
Khi chạy song song lệnh Bash với nhiều script, bạn cần hiểu rõ nguồn gốc của dữ liệu đầu vào và vị trí dữ liệu đầu ra (Output). Lúc này, bạn cần xác định nguồn gốc và cấu trúc của dữ liệu và những bước xử lý để chuyển đổi, tạo thành kết quả mong muốn. Từ đây, bạn sẽ hình thành các thao tác để xử lý dữ liệu hiệu quả – Bash I/O.
Lệnh read sẽ tiếp nhận thông tin dữ liệu đầu vào trong Bash. Đồng thời, dòng lệnh hỗ trợ nhiều tùy chọn (arguments) khác nhau, cho phép bạn linh hoạt trong việc thu thập dữ liệu từ người dùng. Tương tự, với tính năng Bash Piping, các dòng lệnh tiếp theo sẽ nối tiếp nhau xử lý sau mỗi cú pháp lệnh được thực hiện xong.
7 cách sử dụng Bash Input cơ bản
Cách 1: Nhập lệnh trực tiếp
Cách phổ biến nhất để cung cấp dữ liệu cho Bash shell là nhập trực tiếp dữ liệu cần xử lý tại cú pháp dòng lệnh. Do đó, bạn cần nhập lệnh, tùy chọn, đối số và các tham số khác ngay sau dấu nhắc của shell.
Ví dụ: Bạn muốn gửi tham số 2 và 5 vào script bash parameternum.sh
, bạn nhập lệnh bash với cú pháp sau:
bash parameternum.sh 2 5
Sau khi nhập lệnh, script này sẽ sử dụng các tham số 2 và 5 để thực hiện các tác vụ cụ thể.
Việc nhập dữ liệu trực tiếp ngay cú pháp dòng lệnh trong Bash Input đơn giản. Bạn chỉ cần nhập lệnh và các tham số tại dấu nhắc, sau đó nhấn Enter để chạy lệnh.
Cách 2: Dùng Bash Script để yêu cầu user nhập dữ liệu đầu vào
Bạn có thể tạo một Bash Script để hiển thị lời nhắc nhập dữ liệu trên terminal và yêu cầu người dùng nhập thông tin cần thiết. Script thông thường sẽ bao gồm 3 thông tin sau:
- Bộ đếm thời gian: Bạn thiết lập đếm ngược từ một khoảng thời gian xác định. Nếu người dùng không nhập dữ liệu gì trong thời gian đó, chương trình sẽ tự động kết thúc.
- Giới hạn độ dài: Bạn có thể giới hạn số lượng ký tự người dùng có thể nhập để tránh trường hợp nhập liệu quá dài không cần thiết.
- Tùy chọn mật khẩu: Bạn có thể cho phép nhận mật khẩu làm đầu vào mà không hiển thị ký tự đã nhập trên màn hình.
Cách 3: Chuyển hướng dữ liệu đầu vào từ 1 file bằng bash
Bash cho phép bạn chuyển hướng dữ liệu đầu vào từ một file đến một lệnh bằng cách sử dụng luồng stdin (đầu vào chuẩn). Mặc định, các lệnh sẽ đọc dữ liệu từ terminal. Tuy nhiên bạn có thể sử dụng toán tử chuyển hướng đầu vào <
nhằm đọc nội dung dữ liệu từ một file.
Ví dụ: Bạn muốn đọc nội dung của file input.txt và sắp xếp, hãy nhập lệnh sort theo cú pháp như sau:
sort < input.txt
Thay vì phải nhập dữ liệu trực tiếp vào terminal, bạn có thể sử dụng luồng stdin và toán tử <
để chuyển hướng đầu vào của dữ liệu từ một file cho một lệnh bất kỳ trong Bash thực hiện và xử lý.
Cách 4: Đọc các dòng trong một file bằng Bash Input
Thỉnh thoảng, bạn cần đọc từng dòng của một file ngay trên terminal. Bash Input có thể giúp bạn thực hiện điều này một cách dễ dàng. Dưới đây là 3 cách đọc nội dung file bạn có thể áp dụng:
- Đọc từng trường (field) trên mỗi dòng của file input.
- Đọc từng dòng của file văn bản để tạo ra file pdf.
- Đọc từ một biến trong Bash shell.
Giả sử, Bạn đã lưu trữ file trước đó vào một biến $filename và biến $n được sử dụng để giữ giá trị của mỗi dòng. Lúc này, bạn hãy sử dụng vòng lặp while, chúng ta sẽ đọc từng dòng từ một file với số dòng cụ thể:
#!/bin/bash
filename='OS.txt'
n=1
while read line;
do
# for read each line
echo "OS distribution line no. $n : $line"
n=$((n+1))
done < $filename
Sau khi đọc, bạn có thể lưu file lại với tên bất kỳ như OSinfo.sh và nhập lệnh sau trên thiết bị đầu cuối để thực hiện tập lệnh #!/bin/bash
:
$ bash OSinfo.sh
Cuối cùng, nếu như muốn xem nội dung file gốc, bạn có thể sử dụng lệnh cat:
$ cat OS.txt
Cách 5: Tổng hợp dữ liệu đầu vào từ nhiều loại file
Bạn có thể lấy dữ liệu input từ 3 loại file khác nhau như:
- File CSV (viết tắt của Comma Separated Values): File CSV lưu trữ dữ liệu theo dạng bảng, các trường dữ liệu được phân cách bằng dấu phẩy.
- File text: Bạn có thể lấy dữ liệu từ các file văn bản.
- File PDF: Bạn cũng có thể lấy dữ liệu từ file PDF cho Bash Script của mình.
Việc nhập dữ liệu từ file giúp bạn dễ dàng xử lý lượng lớn dữ liệu mà không cần nhập thủ công, tiết kiệm thời gian và tăng hiệu quả của Bash Script.
Cách 6: Tự động hoàn thành các lệnh bằng tính năng của bash
Bash hỗ trợ tính năng tự động hoàn thành, giúp bạn hoàn thiện các lệnh, tên file và các input khác một cách nhanh chóng bằng cách nhấn phím Tab.
Thông qua các tính năng tự động hoàn thành một cách hiệu quả và tận dụng các script được tích hợp sẵn trong Bash, bạn có thể tiết kiệm thời gian và giảm thiểu khả năng xảy ra lỗi khi làm việc với dữ liệu đầu vào phức tạp hoặc dài dòng.
Cách 7: Truy cập nội dung của file bằng Bash
Bạn có thể sử dụng lệnh cat trong Bash để xem nội dung của một hoặc nhiều file ngay trên terminal và thậm chí đếm tổng số dòng của chúng
Để thực hiện, bạn có thể thực hiện cú pháp cơ bản của lệnh cat quen thuộc như sau:
$ cat sample.txt
Với cú pháp, bạn có thể truy cập vào toàn bộ nội dung của file sample.txt. Ngoài ra bạn nếu như bạn muốn xem thêm nội dung các file đã có khác như sample1.txt, sample2.txt và sample3.txt, bạn thực hiện tiếp cú pháp như sau
$ cat sample1.txt sample2.txt sample3.txt
Câu hỏi thường gặp
Tại sao việc kiểm tra đầu vào trong một Bash Script lại quan trọng?
Kiểm tra đầu vào giúp ngăn chặn người dùng có ý đồ xấu như đưa vào dữ liệu không hợp lệ, gây lỗi hoặc tấn công hệ thống. Ngoài ra, việc này sẽ giúp chương trình chạy nhanh hơn vì không phải mất thời gian xử lý những dữ liệu sai.
Tham số trong Bash là gì?
Tham số trong Bash cho phép truyền dữ liệu vào script khi được gọi từ dòng lệnh. Có 10 tham số vị trí, được đánh số từ $0 đến $9. $0 thường chứa tên của script, trong khi các tham số từ $1 trở đi chứa các giá trị được cung cấp bởi người dùng. Mặc dù giới hạn là 10, nhưng có các kỹ thuật để xử lý nhiều tham số hơn nếu cần thiết.
Biến trong Bash có kiểu dữ liệu không?
Bash có hai loại biến: biến hệ thống (do hệ thống định nghĩa) và biến người dùng (do bạn tự tạo).
Lời kết
Bài viết trên đã cung cấp cho bạn những thông tin chi tiết về Bash Input. Hy vọng những kiến thức này sẽ giúp bạn khai thác tối đa sức mạnh của Bash, tự tin xử lý dữ liệu và xây dựng các script hiệu quả cho công việc của mình. Nếu còn bất cứ điều gì thắc mắc về Bash Input, bạn có thể bình luận để được giải đáp cụ thể hơn.