Menu
CoddyTech

Đầu vào của người dùng trong tập lệnh

Thuộc phần Kiến thức cơ bản trong hành trình Terminal của Coddy. Bài học 69 trên 82.

Biến rất hữu ích, nhưng đôi khi bạn muốn tập lệnh hỏi người dùng thông tin trong khi chạy. Lệnh read tạm dừng tập lệnh và chờ người dùng nhập nội dung nào đó, rồi lưu đầu vào đó vào một biến.

Cách hoạt động như sau:

#!/bin/bash
echo "What is your name?"
read name
echo "Hello, $name!"

Khi chạy tập lệnh này, chương trình in câu hỏi ra, chờ người dùng nhập tên rồi nhấn Enter, sau đó chào họ. Lệnh read nhận nội dung người dùng nhập và lưu vào biến name.

Bạn có thể làm cho lời nhắc gọn hơn bằng cách dùng cờ -p, cờ này gộp thông báo nhắc và đầu vào trên cùng một dòng:

#!/bin/bash
read -p "Enter your name: " name
echo "Hello, $name!"

Lệnh này hiển thị Enter your name: và chờ bạn nhập trên cùng một dòng, trông gọn gàng hơn. Cờ -p nhận văn bản nhắc nhập làm đối số, theo sau là tên biến dùng để lưu đầu vào.

Đầu vào từ người dùng giúp các tập lệnh trở nên tương tác và linh hoạt. Thay vì ghi cứng các giá trị, bạn có thể viết một tập lệnh hoạt động khác nhau tùy theo thông tin người dùng cung cấp mỗi lần chạy.

challenge icon

Thử thách

Dễ

Tạo một tập lệnh shell có tên greeter.sh để hỏi người dùng màu sắc yêu thích, sau đó hiển thị một thông báo dựa trên câu trả lời.

Tập lệnh cần:

  1. Bắt đầu bằng dòng shebang (#!/bin/bash)
  2. Dùng read với cờ -p để hiển thị lời nhắc: What is your favorite color?
  3. Lưu dữ liệu đầu vào vào một biến có tên color
  4. Dùng echo để in: Nice! [color] is a great color! (trong đó [color] là dữ liệu người dùng nhập)

Cho phép chạy tập lệnh, sau đó chạy tập lệnh với dữ liệu đầu vào là blue. Terminal này không có tính tương tác, nên không thể dừng lại để chờ bạn nhập. Vì vậy, hãy gửi câu trả lời vào tập lệnh bằng một pipe:

echo "blue" | ./greeter.sh

Đầu ra sẽ là:

Nice! blue is a great color!

Lưu ý: lời nhắc What is your favorite color? không hiển thị ở đây. read -p chỉ in lời nhắc khi dữ liệu đầu vào đến từ bàn phím, còn ở đây dữ liệu đầu vào đến từ pipe.

Đặt từng dòng bạn viết trong dấu nháy đơn: echo 'echo "Hello $name"' >> script.sh. Dấu nháy đơn ngăn shell thay thế $name trong lúc ghi tệp, nhờ đó tập lệnh giữ nguyên biến và mở rộng biến khi chạy. Dấu nháy kép sẽ thay thế giá trị ngay lập tức.

Gợi ý: Tạo tập lệnh từng dòng một bằng cách dùng echo với chuyển hướng. Dùng read -p "What is your favorite color? " color để hiển thị lời nhắc và nhận dữ liệu đầu vào, sau đó dùng echo "Nice! $color is a great color!" để hiển thị kết quả.

Tự làm thử

Terminal
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức cơ bản

Tự luyện tập: Playground Terminal