Lệnh read trong linux là một công cụ giúp bạn đọc dữ liệu nhập vào với terminal Linux. Hãy cùng Vietnix khám phá cách thức hoạt động, các tùy chọn linh hoạt, và những ví dụ phổ biến giúp bạn tận dụng tối đa sức mạnh của lệnh read.
Lệnh read trong Linux là gì?
Lệnh read trong Linux là một lệnh tích hợp sẵn trong shell Bash (và một số shell khác như Zsh, Ksh) trên hệ điều hành Linux. Chức năng chính của lệnh read là đọc dữ liệu nhập từ người dùng thông qua bàn phím và lưu trữ dữ liệu đó vào một hoặc nhiều biến.
Cú pháp:
read [-options] [name...]
Mọi người cũng xem:
7 tùy chọn phổ biến của lệnh read trong Linux
Để xem toàn bộ hướng dẫn chi tiết trong lệnh read, bạn có thể gõ lệnh sau:
man read
Tùy chọn | Mô tả |
---|---|
-p (prompt) | Hiển thị một đoạn gợi ý trước khi chờ bạn nhập dữ liệu. |
-r | Ngăn chặn việc dấu gạch chéo ngược (\) được hiểu là ký tự đặc biệt (ví dụ: \n không còn là ký tự xuống dòng). |
-a (array) | Đọc dữ liệu nhập vào dưới dạng mảng. |
-e | Cho phép bạn sử dụng các phím mũi tên, Tab, và các phím chức năng khác để chỉnh sửa dòng lệnh đã nhập (tương tự như khi dùng Bash). |
-n (count) | Đọc một số lượng ký tự nhất định mà bạn chỉ định. Sau khi đủ số lượng ký tự, lệnh sẽ kết thúc mà không cần bạn nhấn Enter. |
-s | Không hiển thị ký tự khi bạn nhập (thường dùng để nhập mật khẩu). |
-t (timeout) | Đặt thời gian chờ tối đa (tính bằng giây). Nếu bạn không nhập gì trong khoảng thời gian này, lệnh sẽ kết thúc. |
Hướng dẫn cách sử dụng lệnh read trong Linux
Dưới đây là hướng dẫn gồm 4 bước để áp dụng và kiểm tra lệnh read:
Bước 1: Mở terminal
Bước 2: Gõ lệnh sau và nhấn enter
read
Bước 3: Khi lời nhắc xuất hiện, nhập một câu và nhấn enter
Bước 4: Sử dụng lệnh echo trong Linux để hiển thị nội dung bạn vừa nhập:
echo $REPLY
Tại đây, biến REPLY lưu trữ dữ liệu đầu vào của người dùng trong lệnh đọc.
8 ví dụ cụ thể lệnh read trong Linux
- Ví dụ 1: Đọc input từ người dùng bằng lệnh read trong Linux
- Ví dụ 2: Đọc dữ liệu vào mảng bằng lệnh read trong Linux
- Ví dụ 3: Đọc password bằng lệnh read trong Linux
- Ví dụ 4: Đọc nội dung từ file bằng lệnh read trong Linux
- Ví dụ 5: Đọc số lượng ký tự giới hạn bằng lệnh read trong Linux
- Ví dụ 6: Thiết lập thời gian chờ cho input bằng lệnh read
- Ví dụ 7: Đọc cho đến khi gặp ký tự phân cách được chỉ định
- Ví dụ 8: Cung cấp giá trị ban đầu cho dữ liệu đầu vào
Ví dụ 1: Đọc input từ người dùng bằng lệnh read trong Linux
Để nhận thông tin nhập vào từ người dùng, ta sử dụng lệnh read
theo sau là tên biến và dùng tùy chọn -p
để hiển thị một thông báo yêu cầu nhập liệu. Thông tin nhập vào có thể được lưu trữ trong một hoặc nhiều biến tùy thuộc vào độ dài dữ liệu. Dưới đây là 2 trường hợp:
Trường hợp 1: Lưu thông tin vào một biến duy nhất
Nếu chỉ muốn lưu vào một biến, bạn chỉ cần ghi tên biến đó sau lệnh read (ví dụ: read name sẽ lưu thông tin vào biến name). Sau đó, bạn chạy lệnh dưới đây trên terminal để đọc thông tin của người dùng và lưu trữ vào một biến:
read -p 'Enter your name: ' name
Bây giờ, kiểm tra giá trị được lưu trữ trong biến name bằng lệnh echo:
echo $name
Output: Ở đây, lệnh yêu cầu người dùng nhập tên và lưu trữ input vào biến name được chỉ định.
Trường hợp 2: Lưu Trữ Input của người dùng vào nhiều biến
Nếu muốn lưu thông tin vào nhiều biến, bạn ghi tên các biến cách nhau bởi dấu cách sau lệnh read (ví dụ: read fName lName sẽ lưu tên và họ của người dùng lần lượt vào biến fName và lName). Ở bước tiếp theo, bạn chạy lệnh dưới đây trên terminal để đọc thông tin của người dùng và lưu trữ vào nhiều biến:
read -p 'Enter first & last name:' fName lName
Sau đó, sử dụng lệnh echo để kiểm tra giá trị được lưu trữ trong các biến:
echo $fName $lName
Output: Bây giờ, người dùng có thể lưu tên và họ vào các biến fName và lName.
Ví dụ 2: Đọc dữ liệu vào mảng bằng lệnh read trong Linux
Để đọc thông tin nhập vào từ người dùng dưới dạng một mảng, sử dụng lệnh read -a
cùng với tên mảng. Thay vì dùng nhiều biến riêng lẻ cho một chuỗi, với tùy chọn -a
có thể lưu trữ các thông tin nhập vào trong một mảng dựa trên dấu cách. Điều này tiện lợi khi bạn cần xử lý nhiều dữ liệu nhập vào cùng lúc. Dưới đây là lệnh để đọc dữ liệu vào một mảng:
read -a colors
Bây giờ, truy xuất các giá trị đã lưu bằng các lệnh dưới đây:
echo ${colors[0]}
echo ${colors[1]}
echo ${colors[2]}
Nếu người dùng nhập vào red green blue, thì lệnh read -a colors sẽ tạo ra một mảng colors chứa 3 phần tử: red, green và blue. Kết quả là lệnh sẽ đọc các phần tử red, green và blue vào một mảng có tên colors.
Ví dụ 3: Đọc password bằng lệnh read trong Linux
Để đọc thông tin bảo mật như password từ dòng lệnh mà không hiển thị chúng trên màn hình, lúc này bạn có thể sử dụng lệnh read cùng với tùy chọn -s:
Bước 1: Bạn chạy lệnh dưới đây trên terminal để bảo mật dữ liệu khi đọc:
read -s password
Bước 2: Sau đó, bạn có thể kiểm tra giá trị đã nhập bằng lệnh echo
echo $password
Output: Lệnh read với tùy chọn -s được sử dụng để không hiển thị trên màn hình trong quá trình nhập
Ví dụ 4: Đọc nội dung từ file bằng lệnh read trong Linux
Để đọc dữ liệu từ một file, bạn có thể sử dụng lệnh read kèm theo vòng lặp while. Ví dụ, bạn muốn lấy dữ liệu từ file states.txt, chạy lệnh dưới đây:
While IFS= read -r line; do echo "\$$line"; done < states.txt
Output: Lệnh này sẽ đọc từng dòng một từ file states.txt và hiển thị ra mỗi dòng. Tùy chọn -r
sẽ ngăn chặn việc các dấu gạch chéo ngược (\) bị coi là ký tự thoát.
Ví dụ 5: Đọc số lượng ký tự giới hạn bằng lệnh read trong Linux
Trong Linux, khi bạn muốn người dùng nhập dữ liệu nhưng chỉ lấy một số lượng ký tự nhất định, lệnh read có 2 tùy chọn hữu ích là -n
và -N
để giới hạn số lượng ký tự được đọc. Để hiểu hơn bạn xem qua 2 trường hợp dưới đây:
Trường hợp 1: Sử dụng tùy chọn -n
Tùy chọn -n giới hạn số ký tự tối đa được đọc. Ví dụ:
read -n 5 foods
Lệnh này sẽ đọc tối đa 5 ký tự và lưu vào biến foods.
Trường hợp 2: Sử dụng tùy chọn – N
Tùy chọn -N
giới hạn số byte tối đa được đọc (thường tương đương với số ký tự). Bạn xem ví dụ sau đây:
read -N 11 variable_name
Output: Lệnh này sẽ đọc tối đa 11 byte (hoặc ký tự) và lưu vào biến có tên variable_name. Điểm khác biệt quan trọng là tùy chọn -N chỉ đếm đủ số lượng byte đã chỉ định và không quan tâm đến việc bạn có nhấn phím cách hay ENTER hay không.
Ví dụ 6: Thiết lập thời gian chờ cho input bằng lệnh read
Để thiết lập thời gian chờ cho việc nhập thông tin, bạn sử dụng lệnh read với tùy chọn -t để đặt giới hạn thời gian. Bạn xem ví dụ sau:
read -t 2 response
Kết quả là lệnh này sẽ đợi người dùng nhập liệu trong tối đa 2 giây. Nếu người dùng không nhập gì trong khoảng thời gian đó, lệnh read sẽ kết thúc.
Ví dụ 7: Đọc cho đến khi gặp ký tự phân cách được chỉ định
Để đọc nội dung cho đến khi gặp một ký tự phân cách cụ thể, bạn có thể sử dụng lệnh read -d, sau đó là ký tự phân cách được đặt trong dấu ngoặc kép (” “).
Ví dụ:
read -d ":" input
Trong ví dụ trên, lệnh sẽ đọc cho đến khi xuất hiện dấu hai chấm (:).
Ví dụ 8: Cung cấp giá trị ban đầu cho dữ liệu đầu vào
Để gán sẵn một giá trị cho người dùng có thể sửa, bạn sử dụng lệnh read kèm tùy chọn -i. Sau đó, chạy lệnh sau để đặt giá trị mặc định cho biến name:
read -i "default" -p "Enter your name: " name
Tiếp theo bạn sử dụng lệnh echo để hiển thị giá trị ban đầu:
echo "Hello ${name: -default}"
Output: Lệnh này sẽ yêu cầu người dùng nhập tên, với default là giá trị được điền sẵn. Sau khi nhập (hoặc nhấn Enter để giữ nguyên giá trị mặc định), chương trình sẽ chào người dùng bằng “Hello” cùng với tên họ đã nhập hoặc “default” nếu không nhập gì.
Hướng dẫn sử dụng lệnh read nâng cao
- Chuyển thông tin đến lệnh read
- Sử dụng ký hiệu Heredoc để nhập văn bản vào read
- Xử lý ký tự đặc biệt và dấu gạch chéo ngược
Lệnh read trong Linux rất linh hoạt và có thể tùy chỉnh cao, cho phép bạn thực hiện nhiều chức năng nâng cao. Dưới đây là một số cách dùng nâng cao:
Chuyển thông tin đến lệnh read
Để đưa thông tin vào lệnh read, bạn có thể sử dụng nhiều phương pháp khác nhau. Một cách đơn giản và thường dùng là kết hợp lệnh echo với read thông qua dấu |. Dưới đây là ví dụ:
echo "hello there!" | (read a b; echo $a; echo $b)
Output: Lệnh này in ra dòng chữ “hello there!” và chuyển nó vào subshell. Trong subshell, lệnh read đọc dữ liệu vào các biến a và b, sau đó hiển thị giá trị của a và b.
Sử dụng ký hiệu Heredoc để nhập văn bản vào read
Ký hiệu Heredoc cho phép bạn nhập nhiều dòng văn bản trực tiếp vào lệnh read mà không cần tạo file trung gian, giúp tập lệnh gọn gàng và dễ đọc hơn.
Để nhập dữ liệu vào Lệnh read bằng cách viết Heredoc, làm như sau:
Bước 1: Viết lệnh này và nhấn Enter:
read a b <<< "hello there!"
Bước 2: Sau đó, dùng lệnh echo để hiển thị nội dung của các biến a và b.
echo $a
echo $b
Output: Lệnh read ở trên đọc hai biến (a và b) từ một chuỗi văn bản được cung cấp thông qua ký hiệu Heredoc (<<<). Sau đó, lệnh echo in giá trị của các biến a và b ra màn hình.
Xử lý ký tự đặc biệt và dấu gạch chéo ngược
Khi bạn nhập dữ liệu vào terminal Linux, đôi khi bạn cần sử dụng dấu gạch chéo ngược (). Bình thường, dấu này có thể dùng để ngắt dòng trong lệnh read. Ví dụ:
read
hello \
> there \
> !
Như bạn thấy, lệnh read lưu trữ thông tin nhập vào trong biến $REPLY. Nhấn Enter sau dấu gạch chéo ngược sẽ không kết thúc lệnh. Bây giờ, hãy in kết quả bằng lệnh echo.
echo $REPLY
Kết quả sẽ được hiển thị ra mà không giữ lại các dấu xuống dòng bạn đã nhập trước đó.
Tuy nhiên, bạn có thể vô hiệu hóa việc dùng dấu gạch chéo ngược làm ký tự đặc biệt bằng cách thêm lựa chọn -r vào lệnh read. Điều này rất hữu ích khi bạn đọc đường dẫn tệp (file), nơi dấu gạch chéo ngược có ý nghĩa quan trọng. Ở bước tiếp theo, bạn tiến hành Chạy lệnh bên dưới:
read -r <<< "hello\there!"; echo $REPLY
Output: Lệnh này đọc chuỗi ký tự input vào biến $REPLY mà không coi dấu gạch chéo ngược là ký tự đặc biệt, sau đó in nội dung của biến này ra màn hình.
Câu hỏi thường gặp
Lệnh read-only trong Linux là gì?
Lệnh read-only giúp bảo vệ file và thư mục khỏi bị chỉnh sửa. Khi sử dụng lệnh này, bạn vẫn có thể xem nội dung bên trong mà không lo vô tình làm thay đổi chúng.
Sự khác biệt giữa lệnh read và lệnh read-only là gì?
Lệnh read dùng để đọc dữ liệu từ bàn phím hoặc nguồn nhập liệu khác. Ngược lại, “read-only” cho phép bạn chuyển đổi trạng thái của một file giữa chế độ chỉ đọc và chế độ cho phép ghi. Khi file ở trạng thái chỉ đọc, bạn không thể thay đổi nội dung của nó.
– Cú pháp của lệnh read: read [-options] [name…]
– Cú pháp của lệnh chmod trong Linux để chuyển file sang chế độ chỉ đọc: chmod a=r file_name
Làm thế nào để đọc một file bằng lệnh Linux?
Trong Linux, bạn có thể đọc nội dung của một file bằng các lệnh như lệnh cat trong linux, lệnh less hay lệnh more. Ví dụ, lệnh cat theo sau tên file sẽ hiển thị toàn bộ nội dung của file đó trên màn hình.
Lời kết
Lệnh read trong Linux là một công cụ linh hoạt cho phép người dùng tương tác với các tập lệnh shell một cách hiệu quả. Hy vọng qua bài viết này, bạn đã nắm vững cách sử dụng lệnh read trong Linux và có thể áp dụng những kiến thức này vào các dự án của mình. Nếu bạn có bất kỳ câu hỏi hoặc thắc mắc nào, đừng ngần ngại để lại bình luận bên dưới để Vietnix giải đáp.