Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Thành thạo nhắc nhập người dùng trong Bash Script: Hướng dẫn nhanh

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.