Đầ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.
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:
- Bắt đầu bằng dòng shebang (
#!/bin/bash) - Dùng
readvới cờ-pđể hiển thị lời nhắc:What is your favorite color? - Lưu dữ liệu đầu vào vào một biến có tên
color - 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 -pchỉ 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ế$nametrong 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
echovới chuyển hướng. Dùngread -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ùngecho "Nice! $color is a great color!"để hiển thị kết quả.
Tự làm thử
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
4Thư mục
Tạo thư mụcSao chép thư mụcDi chuyển và đổi tên thư mụcXóa thư mụcÔn tập: thao tác với thư mục7Nội dung tệp
Head và tailĐếm từLệnh sortLệnh uniqueCơ bản về grepGrep với các cờÔn tập: Thám tử văn bản13Cơ bản về viết tập lệnh shell
Tập lệnh shell là gìTạo và chạy tập lệnhBiến trong tập lệnhĐầu vào của người dùng trong tập lệnhCâu lệnh ifVòng lặp forVòng lặp whileÔn tập: đoán số2Điều hướng
In đường dẫn thư mục hiện tạiLiệt kê tệpChuyển thư mụcĐường dẫn tuyệt đối và tương đốiThư mục chính và thư mục gốcÔn tập: tìm đường8Chuyển hướng
Đầu ra chuẩnGhi đè vào tệpGhi thêm vào tệpĐầu vào chuẩnLỗi chuẩnÔn tập: Công cụ tạo nhật ký6Ký tự đại diện và mẫu
Ký tự đại diện dấu saoKý tự đại diện dấu hỏiKý tự đại diện trong ngoặc vuôngKết hợp ký tự đại diệnÔn tập: thao tác có chọn lọc9Đường ống
Đường ống là gìNối hai lệnh bằng đường ốngNối nhiều lệnh bằng đường ốngDùng đường ống với grepÔn tập: luồng xử lý dữ liệuTự luyện tập: Playground Terminal