Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Cách nhắc nhập của người dùng trong tập lệnh Bash / Shell

Hướng dẫn ngắn này sẽ dạy bạn nhắc người dùng nhập đầu vào đã nhập từ các tập lệnh Bash / Shell của bạn. Nó dễ học, dễ làm, vì vậy hãy đọc tiếp!

đã đọc Lệnh

Để đọc thông tin đầu vào của người dùng trong các tập lệnh shell, hãy sử dụng tên gọi phù hợp là read yêu cầu. Nó có cú pháp sau:

read OPTIONS VARIABLES

Lưu ý rằng:

  • đã đọc lệnh sẽ đọc một dòng từ đầu vào chuẩn và chia đầu vào đó thành các trường
    • Thông thường, đầu vào chuẩn là thiết bị đầu cuối có đầu vào từ bàn phím của bạn, nhưng bạn cũng có thể chuyển hướng hoặc chuyển hướng đầu vào đến đọc lệnh
    • Từ góc độ người dùng, họ sẽ được nhắc và phải nhập nội dung nào đó, sau đó nhấn phím ENTER
  • TÙY CHỌN phải là danh sách các cờ tùy chọn từ bảng dưới đây sẽ sửa đổi hành vi của đọc lệnh
  • BIẾN TẦN là danh sách các giá trị sẽ được chuyển tới tập lệnh được phân tách bằng dấu cách
    • Nếu -p đã được sử dụng, bạn có thể ghép nối tùy chọn này với danh sách lời nhắc phù hợp để cho người dùng biết họ nên nhập gì
    • Dưới dạng nhiều BIẾN TẦN có thể được cung cấp cách nhau bằng dấu cách, bất kỳ giá trị nào bạn muốn nhập, bao gồm dấu cách hoặc các ký tự đặc biệt khác, đều phải được trích dẫn
read Các tùy chọn thường được sử dụng
-mảng Gán các từ được đọc cho các chỉ số tuần tự của biến mảng ARRAY, bắt đầu từ 0
-p nhắc Xuất chuỗi PROMPT không có dòng mới ở cuối trước khi cố gắng đọc
-r Không cho phép dấu gạch chéo ngược thoát khỏi bất kỳ ký tự nào
-s Không lặp lại đầu vào đến từ một thiết bị đầu cuối
-t thời gian chờ Hết thời gian chờ và trả về lỗi nếu không đọc được dòng đầu vào hoàn chỉnh trong vòng TIMEOUT giây

Như thường lệ, bạn có thể nhận hướng dẫn sử dụng cho phần đã đọc lệnh, bao gồm danh sách đầy đủ các tùy chọn có sẵn, bằng cách chạy:

man read

Nhắc nhập bằng lệnh Đọc

Dưới đây là một số ví dụ về việc sử dụng tính năng đọc lệnh chấp nhận đầu vào của người dùng trong các tập lệnh Bash / Shell.

Nhưng trước hết…

Dấu ‘#!’ Trong Tập lệnh Shell của Linux là gì?

Chỉ cần lấy thông tin đầu vào

Đây là cách sử dụng lệnh đơn giản nhất - chỉ cần đọc một giá trị duy nhất từ ​​đầu vào:

#!/bin/bash

read word
echo You just typed $word

Ở trên, đầu vào được đọc thành một biến có tên là $ word và sau đó được hiển thị bằng echo yêu cầu. Một lần nữa, sẽ không có lời nhắc - màn hình sẽ tạm dừng và đợi người dùng nhập nội dung nào đó, sau đó nhấn phím ENTER - sau đó tập lệnh sẽ tiếp tục với đầu vào đã cho.

Để nhận nhiều giá trị đầu vào, hãy thêm nhiều biến hơn vào lệnh, được phân tách bằng dấu cách:

#!/bin/bash

read word1 word2
echo You just typed $word1 followed by $word2

Nhắc nhập bằng tin nhắn

Việc tạm dừng màn hình để chờ nhập liệu không thực sự thân thiện với người dùng. Thông thường, bạn sẽ muốn cho người dùng biết họ phải nhập gì - ví dụ:tên người dùng hoặc mật khẩu. Ví dụ tiếp theo này thực hiện điều đó:

#!/bin/bash

read -p 'Username: ' username
read -sp 'Password: ' password
echo Your username is $username, we will not display your password

Ở trên, -p tùy chọn được sử dụng để hiển thị lời nhắc - một thông báo được hiển thị cho người dùng biết họ nên nhập gì cho giá trị của mỗi biến.

Bạn cũng có thể xem -s tùy chọn được sử dụng cho biến mật khẩu, làm tắt tiếng đầu vào đã nhập để nó không được hiển thị.

Nhắc nhiều đầu vào bằng tin nhắn

Bạn có thể nhắc và sau đó đọc nhiều giá trị:

#!/bin/bash

read -p 'Please type your first and last name: ' first last
echo Your name is $first $last

Nhắc Có / Không

Dưới đây là cách hỏi người dùng một câu hỏi có / không đơn giản bằng cách sử dụng vòng lặp while và một tuyên bố trường hợp . Bất kỳ chuỗi nào bắt đầu bằng y hoặc Y sẽ được hiểu là một *, bất kỳ chuỗi nào bắt đầu bằng n hoặc một N sẽ được hiểu là một không :

#!/bin/bash
while true; do
    read -p "Do you wish to perform this action?" yesno
    case $yesno in
        [Yy]* ) 
            echo "You answered yes"
        ;;
        [Nn]* ) 
            echo "You answered no, exiting"
            exit
        ;;
        * ) echo "Answer either yes or no!";;
    esac
done

Tập lệnh sẽ thực thi cho đến khi có không được nhận - và có thể dễ dàng sửa đổi để nhắc người dùng thực hiện bất kỳ hành động nào.