OnWorks Linux và Windows Online WorkStations

Logo

Lưu trữ trực tuyến miễn phí cho máy trạm

<Trước | Nội dung | Tiếp theo>

Xác thực đầu vào

Với khả năng mới của chúng tôi để nhập liệu bằng bàn phím, một thách thức lập trình bổ sung, xác thực đầu vào. Thông thường, sự khác biệt giữa một chương trình được viết tốt và một chương trình được viết kém nằm ở khả năng của chương trình để đối phó với những điều không mong muốn. Thông thường, điều không mong đợi xuất hiện ở dạng đầu vào không tốt. Chúng tôi đã thực hiện một chút điều này với các chương trình đánh giá của chúng tôi trong chương trước, nơi chúng tôi đã kiểm tra các giá trị của số nguyên và sàng lọc


ra các giá trị trống và các ký tự không phải số. Điều quan trọng là phải thực hiện các loại kiểm tra lập trình này mỗi khi chương trình nhận được đầu vào, để đề phòng dữ liệu không hợp lệ. Điều này đặc biệt quan trọng đối với các chương trình được chia sẻ bởi nhiều người dùng. Việc bỏ qua các biện pháp bảo vệ này vì lợi ích của nền kinh tế có thể được miễn nếu một chương trình được tác giả sử dụng một lần và duy nhất để thực hiện một số nhiệm vụ đặc biệt. Ngay cả sau đó, nếu chương trình thực hiện các tác vụ nguy hiểm như xóa tệp, thì sẽ là khôn ngoan khi bao gồm xác thực dữ liệu, đề phòng.

Ở đây chúng tôi có một chương trình ví dụ xác nhận các loại đầu vào khác nhau:



#! / bin / bash

# read-validate: xác thực đầu vào không hợp lệ_input () {

echo "Đầu vào không hợp lệ '$ REPLY'"> & 2 lối ra 1

}


read -p "Nhập một mục duy nhất>"


# đầu vào trống (không hợp lệ)

[[-z $ REPLY]] && invalid_input


# đầu vào là nhiều mục (không hợp lệ)

(($ (echo $ REPLY | wc -w)> 1)) && invalid_input


# đầu vào có phải là tên tệp hợp lệ không?

if [[$ REPLY = ~ ^ [- [: alnum:] \ ._] + $]]; thì echo "'$ REPLY' là một tên tệp hợp lệ."

nếu [[-e $ REPLY]]; sau đó

echo "Và tệp '$ REPLY' tồn tại."

khác

echo "Tuy nhiên, tệp '$ REPLY' không tồn tại."

fi


# đầu vào có phải là số dấu phẩy động không?

if [[$ REPLY = ~ ^ -? [[: digit:]] * \. [[: digit:]] + $]]; thì echo "'$ REPLY' là một số dấu phẩy động."

khác

echo "'$ REPLY' không phải là số dấu phẩy động."

fi


# đầu vào có phải là số nguyên không?

if [[$ REPLY = ~ ^ -? [[: digit:]] + $]]; thì echo "'$ REPLY' là một số nguyên."

khác

echo "'$ REPLY' không phải là một số nguyên."

#! / bin / bash

# read-validate: xác thực đầu vào không hợp lệ_input () {

echo "Đầu vào không hợp lệ '$ REPLY'"> & 2 lối ra 1

}


read -p "Nhập một mục duy nhất>"


# đầu vào trống (không hợp lệ)

[[-z $ REPLY]] && invalid_input


# đầu vào là nhiều mục (không hợp lệ)

(($ (echo $ REPLY | wc -w)> 1)) && invalid_input


# đầu vào có phải là tên tệp hợp lệ không?

if [[$ REPLY = ~ ^ [- [: alnum:] \ ._] + $]]; thì echo "'$ REPLY' là một tên tệp hợp lệ."

nếu [[-e $ REPLY]]; sau đó

echo "Và tệp '$ REPLY' tồn tại."

khác

echo "Tuy nhiên, tệp '$ REPLY' không tồn tại."

fi


# đầu vào có phải là số dấu phẩy động không?

if [[$ REPLY = ~ ^ -? [[: digit:]] * \. [[: digit:]] + $]]; thì echo "'$ REPLY' là một số dấu phẩy động."

khác

echo "'$ REPLY' không phải là số dấu phẩy động."

fi


# đầu vào có phải là số nguyên không?

if [[$ REPLY = ~ ^ -? [[: digit:]] + $]]; thì echo "'$ REPLY' là một số nguyên."

khác

echo "'$ REPLY' không phải là một số nguyên."

Xác thực đầu vào


fi khác

echo "Chuỗi '$ REPLY' không phải là tên tệp hợp lệ."

fi

fi khác

echo "Chuỗi '$ REPLY' không phải là tên tệp hợp lệ."

fi


Tập lệnh này nhắc người dùng nhập một mục. Mục này sau đó được phân tích để xác định nội dung của nó. Như chúng ta có thể thấy, script sử dụng nhiều khái niệm mà chúng ta đã đề cập cho đến nay, bao gồm cả các hàm shell, [[]], (()), người điều khiển

&&, và nếu, cũng như một liều lượng biểu thức chính quy lành mạnh.


Điện toán đám mây hệ điều hành hàng đầu tại OnWorks: