Hướng dẫn su dung lenh autoexpect trong linux - su dung lenh autoexpect trong linux
Expect command hoặc Expect scripting language. Là ngôn ngữ tự động điền các thao tác của chúng ta ví dụ như password hay user của 1 ftp hay bất cứ gì đó mà file Script Bash Shell không thể thực hiện được thì với Expect Command nó sẻ hỗ trợ giúp bạn. Nếu Expect Command chưa thật sự cài trên hệ thống của bạn thì bạn thực hiện dòng lệnh sau để cài đặt: Show
Hoặc nếu đó là hệ điều hành Centos Red Hat chẳng hạn thì bạn sử dung dòng lệnh này để install Trước khi chúng tôi nói chuyện về expect lệnh, hãy xem một số lệnh expect sử dụng để tương tác với: spawn Starting a script or a program. expect Waiting for program output. send Sending a reply to your program. interact Allowing you in interact with your program.
Chúng ta sẽ phải loại một kịch bản mà yêu cầu một số câu hỏi và chúng tôi sẽ làm cho một kịch bản Expect sẽ trả lời những câu hỏi. Đầu tiên, kịch bản sẽ trông như thế này: #!/bin/bashecho "Hello, who are you?"read $REPLYecho "Can I ask you some questions?"read $REPLYecho "What is your favorite topic?" read $REPLY Bây giờ chúng ta sẽ viết các Expect scripts that will answer this automatically: Expect scripts that will answer this automatically: #!/usr/bin/expect -fset timeout -1spawn ./questionsexpect "Hello, who are you?\r"send -- "Im Adam\r"expect "Can I ask you some questions?\r"send -- "Sure\r"expect "What is your favorite topic?\r"send -- "Technology\r" expect eof Dòng đầu tiên xác định đường dẫn lệnh expect là #!/usr/bin/expect . Chúng tôi có thể sử dụng đẻ trứng để chạy bất kỳ chương trình nào chúng ta muốn hay bất cứ kịch bản tương tác khác. Các dòng còn lại là Expect kịch bản mà tương tác với kịch bản của chúng tôi. Cuối dòng nếu kết thúc tệp có nghĩa là kết thúc của sự tương tác. Bây giờ Showtime, hãy chạy bot câu trả lời của chúng tôi và chắc chắn rằng bạn làm cho nó thực thi. $ chmod +x ./answerbot$./answerbot Cool!! Tất cả câu hỏi được trả lời như chúng ta mong đợi. Nếu bạn nhận được lỗi về vị trí của Expect lệnh có thể vị trí bằng cách sử dụng mà các lệnh: $ which expect Chúng tôi đã không tương tác với kịch bản của chúng tôi ở tất cả, chương trình Expect làm công việc cho chúng tôi. Phương pháp trên có thể được áp dụng cho bất kỳ kịch bản tương tác hoặc chương trình. Mặc dù kịch bản Expect ở trên là rất dễ dàng để viết, có lẽ Expect kịch bản ít khó khăn cho một số người, cũng bạn có nó. Using autoexpectĐể xây dựng một kịch bản expect tự động, bạn có thể sử dụng autoexpect lệnh. autoexpect hoạt động như mong đợi, nhưng nó xây dựng kịch bản tự động hóa cho bạn. Các kịch bản mà bạn muốn tự động được thông qua để autoexpect như một tham số và bạn trả lời các câu hỏi và câu trả lời của bạn sẽ được lưu trong một tập tin. $ autoexpect ./questions Một tập tin được tạo ra được gọi là script.exp có chứa mã tương tự như chúng tôi đã làm ở trên với một số bổ sung rằng chúng tôi sẽ để lại nó cho bây giờ. Nếu bạn chạy tự động tạo ra tập tin script.exp, bạn sẽ thấy những câu trả lời tương tự như mong đợi: Tuyệt vời!! Là siêu dễ dàng. Có rất nhiều lệnh sản xuất ra có thể thay đổi, như trường hợp của chương trình FTP, các kịch bản expect có thể thất bại hoặc bị mắc kẹt. Để giải quyết vấn đề này, bạn có thể sử dụng ký tự đại diện cho các dữ liệu có thể thay đổi để làm cho script của bạn linh hoạt hơn. Working with VariablesCác lệnh thiết lập được sử dụng để xác định các biến trong script Expect như thế này: set MYVAR5MYVAR5 Để truy cập vào các biến, đứng trước nó với $ như thế này $VAR1 Để xác định đối số dòng lệnh trong Expect kịch bản, chúng tôi sử dụng cú pháp sau: set MYVAR[lindex$argv0]MYVAR[lindex$argv0] Ở đây, chúng ta định nghĩa một biến MYVAR mà bằng đối số đầu tiên thông qua. Bạn có thể nhận được đầu tiên và các đối số thứ hai và lưu trữ chúng trong các biến như thế này:
Hãy thêm các biến vào kịch bản của chúng tôi: #!/usr/bin/expect -f set my_name[lindex$argv0]my_name[lindex$argv0] set my_favorite[lindex$argv1]my_favorite[lindex$argv 1] set timeout-1timeout-1 spawn./questions./questions expect"Hello, who are you?\r""Hello, who are you?\r" send--"Im $my_name\r"--"Im $my_name\r" expect"Can I ask you some questions?\r""Can I ask you some questions?\r" send--"Sure\r" --"Sure\r" expect"What is your favorite topic?\r""What is your favorite topic?\r" send--"$my_favorite\r"--"$my_favorite\r" expect eofeof Bây giờ cố gắng chạy kịch bản Expect với một số thông số để xem các đầu ra: $./answerbot SomeName Programming./answerbot SomeName Programming Tuyệt vời!! Bây giờ chúng tôi Expect kịch bản tự động là năng động hơn. Conditional TestsBạn có thể viết có điều kiện thử nghiệm bằng cách sử dụng niềng răng như thế này:
Chúng ta sẽ thay đổi kịch bản của chúng tôi để trở về các điều kiện khác nhau, và chúng tôi sẽ thay đổi kịch bản chúng tôi Expect để xử lý những điều kiện. Chúng tôi sẽ mô phỏng khác hy vọng với các kịch bản sau đây:
Một số ngẫu nhiên được tạo ra mỗi khi bạn chạy script và dựa trên mà số lượng, chúng tôi đặt một điều kiện để trở lại dự kiến sẽ khác nhau. Hãy tạo ra kịch bản Expect sẽ đối phó với điều đó. #!/usr/bin/expect -f set timeout-1timeout-1 spawn./questions./questions expect{ { "*topic?"{send--"Programming\r"}{send--"Programming\r"} "*movie?"{send--"Star wars\r"}{send--"Star wars\r"} } expect eofeof Bây giờ cố gắng chạy kịch bản Expect với một số thông số để xem các đầu ra: $./answerbot SomeName ProgrammingTuyệt vời!! Bây giờ chúng tôi Expect kịch bản tự động là năng động hơn.
Chúng ta sẽ thay đổi kịch bản của chúng tôi để trở về các điều kiện khác nhau, và chúng tôi sẽ thay đổi kịch bản chúng tôi Expect để xử lý những điều kiện.The opening brace must be on the same line. Chúng tôi sẽ mô phỏng khác hy vọng với các kịch bản sau đây:let number=$RANDOM
Chúng ta sẽ thay đổi kịch bản của chúng tôi để trở về các điều kiện khác nhau, và chúng tôi sẽ thay đổi kịch bản chúng tôi Expect để xử lý những điều kiện.For Loops Chúng tôi sẽ mô phỏng khác hy vọng với các kịch bản sau đây:
Chúng ta sẽ thay đổi kịch bản của chúng tôi để trở về các điều kiện khác nhau, và chúng tôi sẽ thay đổi kịch bản chúng tôi Expect để xử lý những điều kiện.Chúng tôi sẽ mô phỏng khác hy vọng với các kịch bản sau đây:
Chúng ta sẽ thay đổi kịch bản của chúng tôi để trở về các điều kiện khác nhau, và chúng tôi sẽ thay đổi kịch bản chúng tôi Expect để xử lý những điều kiện. #!/usr/bin/expect -f procmyfunc{TOTAL}{myfunc{TOTAL}{ let number=$RANDOMset TOTAL[expr$TOTAL+ 1] return"$TOTAL"return"$TOTAL" } setNUM0NUM0 while{$NUM{$NUM<=5}{ Chúng ta sẽ thay đổi kịch bản của chúng tôi để trở về các điều kiện khác nhau, và chúng tôi sẽ thay đổi kịch bản chúng tôi Expect để xử lý những điều kiện.puts "\nNumber $NUM" Chúng tôi sẽ mô phỏng khác hy vọng với các kịch bản sau đây:set NUM[myfunc$NUM] } puts"""" Chúng ta sẽ thay đổi kịch bản của chúng tôi để trở về các điều kiện khác nhau, và chúng tôi sẽ thay đổi kịch bản chúng tôi Expect để xử lý những điều kiện.Interact Command Chúng tôi sẽ mô phỏng khác hy vọng với các kịch bản sau đây: let number=$RANDOM echo"What is your favorite topic?" echo"What is your favorite movie?" #!/bin/bash fi"Hello, who are you?" read$REPLY $REPLY Một số ngẫu nhiên được tạo ra mỗi khi bạn chạy script và dựa trên mà số lượng, chúng tôi đặt một điều kiện để trở lại dự kiến sẽ khác nhau."What is you password?" read$REPLY$REPLY Hãy tạo ra kịch bản Expect sẽ đối phó với điều đó."What is your favorite topic?" read$REPLY$REPLY #!/usr/bin/expect -f
Bây giờ cố gắng chạy kịch bản Expect với một số thông số để xem các đầu ra: $./answerbot SomeName Programming |