Hướng dẫn ngắn này sẽ dạy bạn nhắc người dùng nhập input từ script Bash/Shell. Dễ học, dễ làm, hãy đọc tiếp!
Lệnh read
Để đọc input người dùng trong shell script, dùng lệnh read tên đúng chức năng. Nó có cú pháp sau:
read OPTIONS VARIABLES
Lưu ý:
- Lệnh read sẽ đọc một dòng từ standard input và tách input đó thành các trường
- Thường, standard input là terminal với input từ bàn phím, nhưng bạn cũng có thể pipe hoặc redirect input đến lệnh read
- Từ góc độ người dùng, họ sẽ được nhắc và phải nhập gì đó theo sau phím ENTER
- OPTIONS nên là danh sách cờ tùy chọn từ bảng dưới sẽ sửa đổi hành vi lệnh read
- VARIABLES là danh sách giá trị sẽ truyền cho script cách nhau bởi dấu cách
- Nếu tùy chọn -p dùng, bạn có thể cặp nó với danh sách prompt tương ứng để báo cho người dùng họ nên nhập gì
- Vì nhiều VARIABLES có thể cung cấp cách nhau bởi dấu cách, bất kỳ giá trị bạn muốn nhập, bao gồm dấu cách hoặc ký tự đặc biệt, nên được đặt trong ngoặc kép
| read Tùy chọn thường dùng | |
|---|---|
| -a array | Gán các từ đọc được vào chỉ số tuần tự của biến mảng ARRAY, bắt đầu từ 0 |
| -p prompt | Xuất chuỗi PROMPT không có newline ở cuối trước khi cố đọc |
| -r | Không cho phép backslash thoát bất kỳ ký tự nào |
| -s | Không hiển thị input đến từ terminal |
| -t timeout | Timeout và trả về thất bại nếu dòng input hoàn chỉnh không đọc được trong TIMEOUT giây |
Như thường lệ, bạn có thể xem manual cho lệnh read, bao gồm danh sách đầy đủ tùy chọn, bằng:
man read
Nhắc nhập dùng lệnh Read
Dưới đây là một số ví dụ dùng lệnh read chấp nhận input người dùng trong script Bash/Shell.
Nhưng trước hết…
Dấu ‘#!’ trong Linux Shell Script là gì?
Chỉ nhận input
Đây là cách dùng đơn giản nhất – chỉ đọc một giá trị từ input:
#!/bin/bash read word echo Bạn vừa gõ $word
Trên đây, input đọc vào biến $word, sau đó hiển thị dùng lệnh echo. Lại nhắc, sẽ không có nhắc nhở – màn hình dừng chờ người dùng gõ gì đó, theo sau phím ENTER – sau đó script tiếp tục với input cho trước.
Để nhận nhiều giá trị input, thêm biến vào lệnh, cách nhau bởi dấu cách:
#!/bin/bash read word1 word2 echo Bạn vừa gõ $word1 theo sau $word2
Nhắc nhập với thông báo
Màn hình dừng chờ input không thực sự thân thiện. Thường bạn muốn báo cho người dùng họ nên nhập gì – username hoặc password, ví dụ. Ví dụ sau làm chính điều đó:
#!/bin/bash read -p 'Username: ' username read -sp 'Password: ' password echo Username của bạn là $username, chúng ta sẽ không hiển thị password
Trên đây, tùy chọn -p dùng để hiển thị prompt – thông báo báo cho người dùng họ nên nhập gì cho giá trị của mỗi biến.
Bạn cũng thấy tùy chọn -s dùng cho biến password, làm im lặng input gõ nên không hiển thị.
Nhắc nhiều input với thông báo
Bạn có thể nhắc và đọc nhiều giá trị:
#!/bin/bash read -p 'Vui lòng gõ tên và họ: ' first last echo Tên của bạn là $first $last
Nhắc Yes/No
Cách hỏi người dùng câu hỏi yes/no đơn giản dùng vòng lặp while và câu lệnh case. Bất kỳ chuỗi bắt đầu bằng y hoặc Y sẽ được hiểu là yes*, bất kỳ chuỗi bắt đầu bằng n hoặc N sẽ được hiểu là no:
#!/bin/bash
while true; do
read -p "Bạn có muốn thực hiện hành động này?" yesno
case $yesno in
[Yy]* ) echo "Bạn trả lời yes" ;;
[Nn]* ) echo "Bạn trả lời no, thoát" ; exit ;;
* ) echo "Trả lời yes hoặc no!" ;;
esac
done
Script sẽ chạy cho đến khi nhận được no – và dễ dàng sửa đổi để nhắc người dùng thực hiện bất kỳ hành động nào.