Cách sử dụng lệnh read trong Linux

Đôi khi khi tương tác với hệ thống Linux, bạn có thể cần nhắc người dùng nhập dữ liệu hoặc đọc dữ liệu từ các file hoặc thậm chí muốn đặt thời gian chờ. Bạn có thể thực hiện các tác vụ này và nhiều tác vụ khác bằng lệnh read và các tùy chọn khác nhau của lệnh này.

Bài viết này sẽ hướng dẫn bạn những điều cơ bản về lệnh read và các tùy chọn của lệnh này thông qua một số ví dụ.

Lệnh Read là gì?

Trong Linux, bạn có thể sử dụng lệnh read để ghi lại dữ liệu đầu vào của người dùng hoặc đọc một dòng từ đầu vào chuẩn (stdin). Lệnh này đọc tổng số byte từ mô tả file đã cho và lưu trữ chúng trong buffer. Sau đó, lệnh trả về số byte đã đọc, số không hoặc lỗi.

Ví dụ, nếu số hoặc số đếm bằng không, lệnh sẽ tham chiếu đến phần cuối của file. Nhưng khi thành công, lệnh sẽ trả về số byte đã đọc. Nếu lệnh read tìm thấy một số lỗi, lệnh sẽ trả về -1.

Trước khi khám phá các tùy chọn lệnh read, trước tiên chúng ta hãy xem cú pháp của lệnh read:

read [options] [name…]

Ở đây, tham số options chỉ định nhiều flag khác nhau được sử dụng để sửa đổi hành vi của lệnh read. Ngoài ra, tham số name chỉ định tên của nhiều biến được sử dụng để lưu trữ dữ liệu đầu vào. Nếu không cung cấp tên, dữ liệu đầu vào sẽ được giữ lại trong biến bash $REPLY.

Các tùy chọn lệnh read

Lệnh read của Bash có nhiều tùy chọn để kiểm soát dữ liệu đầu vào của người dùng. Một số tùy chọn không cần tham số bổ sung, trong khi một số khác thì cần.

Hãy cùng khám phá một số tùy chọn mà chúng ta có thể sử dụng với lệnh read:

Tùy chọnMô tả
-a <array>Nó lưu trữ dữ liệu đầu vào dưới dạng một mảng thay vì các biến riêng biệt.
-sChạy âm thầm, nghĩa là dữ liệu đầu vào không được hiển thị trên terminal
-eCho phép hỗ trợ thư viện readline và đọc dòng input
-i <prefix>Cung cấp giá trị đầu vào ban đầu xuất hiện tại dấu nhắc khi sử dụng readline
-p <prompt>Hiển thị lời nhắc được chỉ định trước khi đọc đầu vào
-u <file descriptor>Đọc từ một mô tả file được chỉ định thay vì đầu vào chuẩn (stdin)
-d <delimiter>Cho phép chỉ định một dấu phân cách dòng đầu vào thay vì ký tự xuống dòng mặc định
-t <time>Đặt thời gian chờ cho đầu vào; nếu đầu vào không được nhận trong thời gian này, lệnh read sẽ trả về lỗi
-rKhi được thiết lập, dấu gạch chéo ngược không được coi là ký tự thoát
-n <number>Chỉ đọc số lượng ký tự được chỉ định

Nhập lệnh sau để xuất menu trợ giúp lệnh read:

head --help

Cách đọc đầu vào bằng lệnh read

Cách đơn giản nhất để sử dụng lệnh read là sử dụng lệnh này mà không có bất kỳ đối số hoặc tùy chọn nào. Khi chỉ thực thi lệnh read, lệnh sẽ yêu cầu bạn cung cấp đầu vào mà bạn muốn đọc. Sau khi cung cấp đầu vào, lệnh sẽ thoát và lưu trữ đầu vào đó trong biến mặc định có tên là REPLY.

Hãy lấy ví dụ sau:

read
<user_input>
Sử dụng lệnh read để thu thập đầu vào từ người dùng
Sử dụng lệnh read để thu thập đầu vào từ người dùng

Bây giờ, sau khi cung cấp đầu vào, hãy hiển thị đầu vào đó bằng lệnh echo:

echo $REPLY
Sử dụng lệnh echo để hiển thị đầu ra của biến REPLY
Sử dụng lệnh echo để hiển thị đầu ra của biến REPLY

Trong khi đọc giá trị đầu vào, bạn cũng có thể lưu trữ nó trong bất kỳ biến cụ thể nào khác. Ví dụ, để lưu trữ kết quả vào một biến, hãy nhập lệnh read theo sau là tên biến:

read variable1
<user_input>
Đọc giá trị đầu vào của người dùng và lưu trữ vào biến 
Đọc giá trị đầu vào của người dùng và lưu trữ vào biến

Bây giờ, để hiển thị kết quả, bạn cần sử dụng lệnh echo với biến lưu trữ giá trị:

echo $variable1
Hiển thị giá trị đã thu thập của biến bằng lệnh echo
Hiển thị giá trị đã thu thập của biến bằng lệnh echo

Đọc nhiều giá trị

Không có cách trực tiếp nào để đọc nhiều giá trị bằng lệnh read. Tuy nhiên, bạn có thể chia một câu đầu vào thành nhiều từ và lưu trữ chúng trong các biến khác nhau.

Hãy xem xét ví dụ sau:

read variable1 variable2 variable3
<user_input>
Đọc nhiều giá trị và lưu trữ chúng vào nhiều biến
Đọc nhiều giá trị và lưu trữ chúng vào nhiều biến

Ở đây, bạn lưu trữ từ đầu tiên của câu trong biến đầu tiên, từ thứ hai trong biến thứ hai và tất cả các từ còn lại trong biến cuối cùng được cung cấp.

Hãy trả về đầu ra bằng lệnh sau:

echo <$variabl_namee>
Hiển thị nhiều giá trị bằng lệnh echo
Hiển thị nhiều giá trị bằng lệnh echo

Đọc từ một file

Mặc dù lệnh read chủ yếu dành cho đầu vào của người dùng, bạn cũng có thể sử dụng lệnh này để đọc các dòng từ file. Để thực hiện việc này, chỉ cần sử dụng loop while, lệnh echo và lệnh read theo sau là tên biến cụ thể:

while read line; do
echo "$line"
done < samplefile.txt
Đọc từ file bằng lệnh read
Đọc từ file bằng lệnh read

Ở đây, loop while đọc từng dòng của "samplefile.txt" và ghi lại trong biến line. Sau khi đọc tất cả các dòng của file, lệnh echo sẽ hiển thị giá trị của dòng đó.

Đọc đầu vào trong loop

Bạn cũng có thể nắm bắt đầu vào của người dùng theo trình tự lặp lại bằng cách sử dụng lệnh read với loop while. Điều này hữu ích khi bạn muốn thu thập nhiều đầu vào hoặc tiếp tục cho đến khi đáp ứng được một điều kiện cụ thể.

Ví dụ, hãy đọc nhiều đầu vào và cũng hiển thị chúng trên terminal:

while read line; do
echo "Line: $line"
done
Đọc giá trị đầu vào từ người dùng trong loop liên tục
Đọc giá trị đầu vào từ người dùng trong loop liên tục

Hơn nữa, loop tiếp tục cho đến khi nhận được tín hiệu kết thúc file (EOF), thường là bằng cách nhấn Ctrl + D.

Thứ Tư, 31/07/2024 16:54
51 👨 79
0 Bình luận
Sắp xếp theo
    ❖ Linux