Khi bạn đang viết kịch bản với Bash, đôi khi bạn cần đọc dữ liệu từ hoặc ghi dữ liệu vào một tệp. Đôi khi một tệp có thể chứa các tùy chọn cấu hình và những lần khác, tệp là dữ liệu mà người dùng của bạn đang tạo bằng ứng dụng của bạn. Mỗi ngôn ngữ xử lý tác vụ này hơi khác một chút và bài viết này trình bày cách xử lý tệp dữ liệu với Bash và các trình bao POSIX khác.
Cài đặt Bash
Nếu bạn đang sử dụng Linux, có thể bạn đã có Bash. Nếu không, bạn có thể tìm thấy nó trong kho phần mềm của mình.
Trên macOS, bạn có thể sử dụng thiết bị đầu cuối mặc định, Bash hoặc Zsh, tùy thuộc vào phiên bản macOS bạn đang chạy.
Trên Windows, có một số cách để trải nghiệm Bash, bao gồm cả Hệ thống con Windows được hỗ trợ chính thức của Microsoft dành cho Linux (WSL).
Sau khi bạn đã cài đặt Bash, hãy mở trình soạn thảo văn bản yêu thích của bạn và sẵn sàng viết mã.
Đọc tệp bằng Bash
Ngoài vai trò là một shell, Bash còn là một ngôn ngữ kịch bản. Có một số cách để đọc dữ liệu từ Bash:Bạn có thể tạo một loại luồng dữ liệu và phân tích cú pháp đầu ra hoặc bạn có thể tải dữ liệu vào bộ nhớ. Cả hai đều là các phương pháp nhập thông tin hợp lệ, nhưng mỗi phương pháp đều có các trường hợp sử dụng khá cụ thể.
Nguồn tệp trong Bash
Khi bạn "nguồn" một tệp trong Bash, bạn khiến Bash đọc nội dung của tệp với kỳ vọng rằng tệp đó chứa dữ liệu hợp lệ mà Bash có thể phù hợp với mô hình dữ liệu đã thiết lập của nó. Bạn sẽ không lấy nguồn dữ liệu từ bất kỳ tệp cũ nào, nhưng bạn có thể sử dụng phương pháp này để đọc các tệp cấu hình và chức năng.
Ví dụ:tạo một tệp có tên example.sh
và nhập cái này vào đó:
#! / bin / sh
hello opensource.com
echo "Ý nghĩa của cuộc sống là $ var"
Chạy mã để xem nó không thành công:
$ bash ./example.sh
./example.sh:dòng 3:chào:không tìm thấy lệnh
Ý nghĩa của cuộc sống là
Bash không có lệnh được gọi là greet
, vì vậy nó không thể thực thi dòng đó và nó không có bản ghi của một biến có tên là var
, vì vậy không có ý nghĩa cuộc sống được biết đến. Để khắc phục sự cố này, hãy tạo một tệp có tên include.sh
:
welcome () {
echo "Xin chào $ {1}"
}
var =42
Sửa đổi example.sh
của bạn tập lệnh để bao gồm một source
lệnh:
#! / bin / sh
source include.sh
welcome opensource.com
echo "Ý nghĩa của cuộc sống là $ var "
Chạy tập lệnh để xem nó hoạt động:
$ bash ./example.sh
Xin chào opensource.com
Ý nghĩa của cuộc sống là 42
greet
lệnh được đưa vào môi trường shell của bạn vì nó được định nghĩa trong include.sh
và thậm chí nó còn nhận ra đối số (opensource.com
trong ví dụ này). Biến var
cũng được đặt và nhập.
Phân tích cú pháp tệp trong Bash
Cách khác để đưa dữ liệu "vào" Bash là phân tích cú pháp nó dưới dạng một luồng dữ liệu. Có rất nhiều cách để làm điều này. Bạn có thể sử dụng grep
hoặc cat
hoặc bất kỳ lệnh nào lấy dữ liệu và chuyển nó sang stdout. Ngoài ra, bạn có thể sử dụng những gì được tích hợp trong Bash:chuyển hướng. Việc tự chuyển hướng không hữu ích lắm, vì vậy trong ví dụ này, tôi cũng sử dụng echo
tích hợp sẵn lệnh in kết quả của chuyển hướng:
#! / bin / sh
echo $ (Lưu nó dưới dạng
stream.sh
và chạy nó để xem kết quả:$ bash ./stream.sh
welcome () {echo "Xin chào $ {1}"} var =42
$Đối với mỗi dòng trong
include.sh
tệp, Bash in (hoặc lặp lại) dòng tới thiết bị đầu cuối của bạn. Đưa nó vào một trình phân tích cú pháp thích hợp trước tiên là một cách phổ biến để đọc dữ liệu với Bash. Ví dụ:giả sử trong giây lát rằnginclude.sh
là một tệp cấu hình có các cặp khóa và giá trị được phân tách bằng một dấu bằng (=
) dấu hiệu. Bạn có thể nhận được các giá trị bằngawk
hoặc thậm chícut
:#! / bin / sh
myVar =`grep var include.sh | cut -d '=' -f2 '
echo $ myVarThử chạy tập lệnh:
$ bash ./stream.sh
42Ghi dữ liệu vào tệp bằng Bash
Cho dù bạn đang lưu trữ dữ liệu mà người dùng đã tạo bằng ứng dụng của bạn hay chỉ là siêu dữ liệu về những gì người dùng đã làm trong ứng dụng (ví dụ:lưu trò chơi hoặc các bài hát đã phát gần đây), có nhiều lý do chính đáng để lưu trữ dữ liệu để sử dụng sau này. Trong Bash, bạn có thể lưu dữ liệu vào tệp bằng cách sử dụng chuyển hướng trình bao thông thường.
Ví dụ:để tạo một tệp mới có chứa đầu ra, hãy sử dụng một mã thông báo chuyển hướng duy nhất:
#! / bin / sh
TZ =UTC
date> date.txtChạy tập lệnh một vài lần:
$ bash ./date.sh
$ cat date.txt
Thứ Ba ngày 23 tháng 2 22:25:06 UTC 2021
$ bash ./date.sh
$ cat date.txt
Thứ 3 ngày 23 tháng 2 22:25:12 giờ UTC năm 2021Để nối thêm dữ liệu, hãy sử dụng mã chuyển hướng kép:
#! / bin / sh
TZ =UTC
date>> date.txtChạy tập lệnh một vài lần:
$ bash ./date.sh
$ bash ./date.sh
$ bash ./date.sh
$ cat date.txt
Thứ ba ngày 23 tháng 2 22:25:12 UTC 2021
Thứ 3 ngày 23 tháng 2 22:25:17 UTC 2021
Thứ 3 ngày 23 tháng 2 22:25:19 UTC 2021
Thứ 3 ngày 23 tháng 2 22:25:22 UTC 2021
>Bash để dễ dàng lập trình
Bash vượt trội ở độ dễ học bởi vì chỉ với một vài khái niệm cơ bản, bạn có thể xây dựng các chương trình phức tạp. Để có tài liệu đầy đủ, hãy tham khảo tài liệu Bash tuyệt vời trên GNU.org.