Php đọc đầu vào từ stdin

Chúng tôi đã xem xét một dạng đầu vào của người dùng [] trong phần trước. Bây giờ chúng tôi muốn giới thiệu những cách khác mà người dùng có thể cung cấp đầu vào cho tập lệnh Bash. Sau đây, chúng ta sẽ thảo luận về thời điểm và địa điểm tốt nhất để sử dụng từng phương pháp

Sau phần trước khổng lồ, phần này dễ vượt qua hơn nhiều

Yêu cầu người dùng nhập dữ liệu

Nếu chúng tôi muốn yêu cầu người dùng nhập dữ liệu thì chúng tôi sử dụng lệnh có tên là read. Lệnh này lấy đầu vào và sẽ lưu nó vào một biến

đọc var1

Hãy xem một ví dụ đơn giản

Giới thiệu. sh

  1. #. /bin/bash
  2. echo Xin chào, tôi đang nói chuyện với ai vậy?
  3. đọc tên biến đổi
  4. echo Rất vui được gặp bạn $varname

Hãy phá vỡ nó

  • Dòng 4 - In thông báo yêu cầu người dùng nhập dữ liệu
  • Dòng 6 - Chạy lệnh đọc và lưu phản hồi của người dùng vào biến varname
  • Dòng 8 - lặp lại một tin nhắn khác chỉ để xác minh lệnh đọc đã hoạt động. Ghi chú. Tôi đã phải đặt dấu gạch chéo ngược [ \ ] trước dấu ' để nó được thoát

  1. /Giới thiệu. sh
  2. Xin chào, tôi đang nói chuyện với ai vậy?
  3. ryan
  4. Rất vui được gặp bạn Ryan

  • Ghi chú. Ryan ở trên được in nghiêng chỉ để cho thấy rằng đó là thứ tôi đã nhập. Trên đầu vào thiết bị đầu cuối của bạn sẽ hiển thị bình thường

Thêm với Đọc

Bạn có thể thay đổi hành vi đọc bằng nhiều tùy chọn dòng lệnh. [Xem trang hướng dẫn để đọc để xem tất cả chúng. ] Tuy nhiên, hai tùy chọn thường được sử dụng là -p cho phép bạn chỉ định lời nhắc và -s khiến đầu vào im lặng. Điều này có thể giúp bạn dễ dàng yêu cầu kết hợp tên người dùng và mật khẩu như ví dụ bên dưới

đăng nhập. sh

  1. #. /bin/bash
  2. đọc -p 'Tên người dùng. ' biến người dùng
  3. đọc -sp 'Mật khẩu. ' mật khẩu
  4. tiếng vang
  5. echo Cảm ơn bạn $uservar chúng tôi hiện có thông tin đăng nhập của bạn

  • Trên các dòng 4 và 5 ở trên, chúng tôi bao gồm lời nhắc trong dấu ngoặc kép để chúng tôi có thể có khoảng trắng đi kèm với nó. Nếu không, đầu vào của người dùng sẽ bắt đầu ngay sau ký tự cuối cùng của lời nhắc, điều này không lý tưởng theo quan điểm dễ đọc

  1. /đăng nhập. sh
  2. tên tài khoản. ryan
  3. Mật khẩu
  4. Thankyou ryan chúng tôi bây giờ có chi tiết đăng nhập của bạn

Nhiều biến hơn

Cho đến nay chúng tôi đã xem xét một từ duy nhất như đầu vào. chúng ta có thể làm nhiều hơn thế tuy nhiên

ô tô. sh

  1. #. /bin/bash
  2. echo Bạn thích xe gì?
  3. đọc xe1 xe2 xe3
  4. echo Chiếc xe đầu tiên của bạn là. $car1
  5. echo Chiếc xe thứ hai của bạn là. $car2
  6. echo Chiếc xe thứ ba của bạn là. $car3

  1. /ô tô. sh
  2. Bạn thích xe gì?
  3. JaguarMaseratiBentley
  4. chiếc xe đầu tiên của bạn là. báo đốm
  5. Chiếc xe thứ hai của bạn là. maserati
  6. Chiếc xe thứ ba của bạn là. Bentley
  7. /ô tô. sh
  8. Bạn thích xe gì?
  9. Jaguar Maserati Bentley Hoa Sen
  10. chiếc xe đầu tiên của bạn là. báo đốm
  11. Chiếc xe thứ hai của bạn là. maserati
  12. Chiếc xe thứ ba của bạn là. bông sen Bentley

Cơ chế chung là bạn có thể cung cấp một số tên biến để đọc. Đọc sau đó sẽ lấy đầu vào của bạn và chia nhỏ nó trên khoảng trắng. Mục đầu tiên sau đó sẽ được gán cho tên biến đầu tiên, mục thứ hai cho tên biến thứ hai, v.v. Nếu có nhiều mục hơn tên biến thì tất cả các mục còn lại sẽ được thêm vào tên biến cuối cùng. Nếu có ít mục hơn tên biến thì các tên biến còn lại sẽ được đặt thành trống hoặc null

Đọc từ STDIN

Trong Linux, một loạt các lệnh đơn giản, có mục đích duy nhất được kết hợp với nhau để tạo ra một giải pháp lớn hơn phù hợp với nhu cầu chính xác của chúng ta. Khả năng làm điều này là một trong những thế mạnh thực sự của Linux. Hóa ra chúng ta cũng có thể dễ dàng điều chỉnh cơ chế này bằng các tập lệnh của mình. Bằng cách đó, chúng tôi có thể tạo các tập lệnh đóng vai trò là bộ lọc để sửa đổi dữ liệu theo những cách cụ thể cho chúng tôi

Bash chứa đường ống và chuyển hướng bằng các tệp đặc biệt. Mỗi quy trình có một tập hợp tệp riêng [một tệp cho STDIN, STDOUT và STDERR tương ứng] và chúng được liên kết khi đường ống hoặc chuyển hướng được gọi. Mỗi quá trình nhận được các tập tin sau

  • STDIN - /proc//fd/0
  • STDOUT - /proc//fd/1
  • STDERR - /proc//fd/2

Để làm cho cuộc sống thuận tiện hơn, hệ thống tạo ra một số phím tắt cho chúng tôi

  • STDIN - /dev/stdin hoặc /proc/self/fd/0
  • STDOUT - /dev/stdout hoặc /proc/self/fd/1
  • STDERR - /dev/stderr hoặc /proc/self/fd/2

fd trong các đường dẫn trên là viết tắt của bộ mô tả tệp

Vì vậy, nếu chúng tôi muốn làm cho tập lệnh của mình có thể xử lý dữ liệu được dẫn đến tập lệnh, tất cả những gì chúng tôi cần làm là đọc tệp có liên quan. Tất cả các tệp được đề cập ở trên hoạt động như các tệp bình thường

tóm lược

  1. #. /bin/bash
  2. echo Đây là bản tóm tắt dữ liệu bán hàng
  3. tiếng vang =================================================
  4. tiếng vang
  5. con mèo /dev/stdin. cắt -d' ' -f 2,3. loại

Hãy phá vỡ nó

  • Dòng 4, 5, 6 - In tiêu đề cho đầu ra
  • Dòng 8 - cat tệp đại diện cho STDIN, cắt đặt dấu phân cách thành khoảng trắng, trường 2 và 3 sau đó sắp xếp đầu ra

  1. dữ liệu bán hàng mèo. txt
  2. táo Fred 20 ngày 4 tháng 12
  3. cam susy 5 ngày 7 tháng 12
  4. Đánh dấu dưa hấu 12 ngày 10 tháng 12
  5. Terry đào 7 ngày 15 tháng 12
  6. dữ liệu bán hàng mèo. txt. . /tóm lược
  7. Dưới đây là tóm tắt dữ liệu bán hàng
  8. ====================================
  9. táo 20
  10. cam 5
  11. đào 7
  12. dưa hấu 12

Vậy tôi nên sử dụng cái nào?

Vì vậy, bây giờ chúng tôi có 3 phương thức để nhận đầu vào từ người dùng

  • Đối số dòng lệnh
  • Đọc đầu vào trong khi thực thi tập lệnh
  • Chấp nhận dữ liệu đã được chuyển hướng vào tập lệnh Bash qua STDIN

Phương pháp nào là tốt nhất phụ thuộc vào tình hình

Thông thường, bạn nên ưu tiên các đối số dòng lệnh bất cứ khi nào có thể. Chúng thuận tiện nhất cho người dùng vì dữ liệu sẽ được lưu trữ trong lịch sử lệnh của họ để họ có thể dễ dàng quay lại với nó. Đây cũng là cách tiếp cận tốt nhất nếu tập lệnh của bạn có thể được gọi bởi các tập lệnh hoặc quy trình khác [ví dụ:. có thể bạn muốn nó chạy định kỳ bằng CRON]

Đôi khi bản chất của dữ liệu là không lý tưởng để nó được lưu trữ trong lịch sử chỉ huy của mọi người, v.v. Một ví dụ điển hình về điều này là thông tin đăng nhập [tên người dùng và mật khẩu]. Trong những trường hợp này, tốt nhất là đọc dữ liệu trong khi thực thi tập lệnh

Nếu tất cả các tập lệnh đang xử lý dữ liệu theo một cách nhất định thì có lẽ tốt nhất là làm việc với STDIN. Bằng cách này, nó có thể dễ dàng được thêm vào một đường ống

Đôi khi bạn có thể thấy rằng sự kết hợp là lý tưởng. Người dùng có thể cung cấp tên tệp làm đối số dòng lệnh và nếu không thì tập lệnh sẽ xử lý những gì nó tìm thấy trên STDIN [khi chúng ta xem xét các câu lệnh If, chúng ta sẽ thấy điều này có thể đạt được như thế nào]. Hoặc có thể đối số dòng lệnh xác định hành vi nhất định nhưng đọc cũng được sử dụng để hỏi thêm thông tin nếu được yêu cầu

Cuối cùng, bạn nên nghĩ về 3 yếu tố khi quyết định cách người dùng sẽ cung cấp dữ liệu cho tập lệnh Bash của bạn

  • Dễ sử dụng - phương pháp nào trong số những phương pháp này sẽ giúp người dùng sử dụng tập lệnh của tôi dễ dàng nhất?
  • Bảo mật - Có dữ liệu nhạy cảm nào mà tôi nên xử lý thích hợp không?
  • Mạnh mẽ - Tôi có thể làm cho hoạt động tập lệnh của mình trở nên trực quan và linh hoạt, đồng thời khó mắc các lỗi đơn giản hơn không?

Tóm lược

đọc varNameĐọc đầu vào từ người dùng và lưu trữ nó trong biến varName. /dev/stdinA mà bạn có thể đọc để lấy STDIN cho tập lệnh Bash

Làm cách nào để nhắc người dùng nhập liệu trong php?

Để nhận thông tin đầu vào từ người dùng, bạn cũng phải nhắc họ nhập nội dung nào đó. Bạn có thể sử dụng hàm `readline[] của PHP để lấy đầu vào này từ bảng điều khiển .

Làm cách nào để đọc dữ liệu trong php?

Tệp đọc PHP - fread[] . Tham số đầu tiên của fread[] chứa tên của tệp để đọc và tham số thứ hai chỉ định số byte tối đa để đọc.

Luồng đầu vào trong php là gì?

php. // đầu vào là luồng chỉ đọc cho phép bạn đọc dữ liệu thô từ phần thân yêu cầu .

Đầu ra php là gì?

PHP cho phép hai phương thức gửi đầu ra tới màn hình. Một cái được gọi là bản in, cái còn lại là tiếng vang. Mặc dù chúng cung cấp cùng một chức năng, nhưng echo là một cấu trúc [nó sẽ được coi là một lệnh], trong đó print là một biểu thức [nó sẽ được đánh giá và sẽ trả về một giá trị]

Chủ Đề