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:
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:

$ apt-get install expect

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

$ yum install expectExpect Command
Expect Command

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.

  • Lệnh được sử dụng để bắt đầu một kịch bản hoặc một chương trình như vỏ, ‎‎FTP‎‎, Telnet, SSH, SCP và như vậy.‎
  • ‎Gửi lệnh được sử dụng để gửi một thư trả lời một kịch bản hoặc một chương trình.‎
  • ‎Lệnh Expect waits cho đầu vào.‎
  • ‎Lệnh tương tác cho phép bạn xác định một tương tác người dùng định sẵn.‎

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?"
echo "Hello, who are you?"
read $REPLY
echo "Can I ask you some questions?"
read $REPLY
echo "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"
set timeout -1
spawn ./questions
expect "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

$./answerbot

Hướng dẫn su dung lenh autoexpect trong linux - su dung lenh autoexpect trong linux

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

Hướng dẫn su dung lenh autoexpect trong linux - su dung lenh autoexpect trong linux

‎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ờ.‎

Hướng dẫn su dung lenh autoexpect trong linux - su dung lenh autoexpect trong linux

‎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:‎

Hướng dẫn su dung lenh autoexpect trong linux - su dung lenh autoexpect trong linux

‎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 Variables

‎Cá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:‎

set my_name[lindex$argv0]my_name[lindex$argv0]

set my_favorite[lindex$argv1]my_favorite[lindex$argv1]

‎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

Hướng dẫn su dung lenh autoexpect trong linux - su dung lenh autoexpect trong linux

‎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 Tests

‎Bạ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:‎

expect{{

"something"{send--"send this\r"}{send--"send this\r"}

"*another"{send--"send another\r"}{send--"send another\r"}

}

‎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:‎

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#!/bin/bash

let number=$RANDOMnumber=$RANDOM

if[$number-gt25000];then[$number-gt25000];then

    echo"What is your favorite topic?"echo"What is your favorite topic?"

else

    echo"What is your favorite movie?"echo"What is your favorite movie?"

fi

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.‎

‎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

Hướng dẫn su dung lenh autoexpect trong linux - su dung lenh autoexpect trong linux

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

‎Tuyệt vời!! Bây giờ chúng tôi Expect kịch bản tự động là năng động hơn.‎

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#!/usr/bin/expect -f

setNUM1NUM1

if{$NUM{$NUM<5}{

"*topic?"{send--"Programming\r"}puts"\Smaller than 5\n"

}elseif{$NUM>5}{elseif {$NUM>5}{

"*movie?"{send--"Star wars\r"}puts"\Bigger than 5\n"

}else{else{

‎Rất rõ ràng. Nếu kịch bản chạm đầu ra chủ đề, kịch bản Expect sẽ gửi chương trình và nếu kịch bản chạm đầu ra bộ phim kịch bản expect sẽ gửi star wars. Không phải là mát mẻ?‎puts"\Equals 5\n"

}

Hướng dẫn su dung lenh autoexpect trong linux - su dung lenh autoexpect trong linux

‎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

1

2

3

4

5

6

7

8

9

10

11

12

13

#!/usr/bin/expect -f

setNUM0NUM0

while{$NUM{$NUM<=5}{

"*topic?"{send--"Programming\r"}puts"\nNumber is $NUM"

"*movie?"{send--"Star wars\r"}set NUM[expr$NUM+1]

}

puts""""

Hướng dẫn su dung lenh autoexpect trong linux - su dung lenh autoexpect trong linux

‎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:‎

#!/usr/bin/expect -f

"*topic?"{send--"Programming\r"}{set NUM0}{$NUM<=5}{incr NUM}{

"*movie?"{send--"Star wars\r"}puts"\nNUM = $NUM"

}

puts""""

Hướng dẫn su dung lenh autoexpect trong linux - su dung lenh autoexpect trong linux

‎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:‎

procmyfunc{TOTAL}{myfunc{TOTAL}{

let number=$RANDOMset TOTAL[expr$TOTAL+1]

    return"$TOTAL"return "$TOTAL"

}

‎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""""

Hướng dẫn su dung lenh autoexpect trong linux - su dung lenh autoexpect trong linux

‎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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#!/usr/bin/expect -f

set timeout-1timeout-1

spawn./questions./questions

expect"Hello, who are you?\r""Hello, who are you?\r"

"*topic?"{send--"Programming\r"}--"Hi Im Adam\r"

"*movie?"{send--"Star wars\r"}"*password?\r"

interact++return ++return

‎Rất rõ ràng. Nếu kịch bản chạm đầu ra chủ đề, kịch bản Expect sẽ gửi chương trình và nếu kịch bản chạm đầu ra bộ phim kịch bản expect sẽ gửi star wars. Không phải là mát mẻ?‎"\r"

If else Conditions"*topic?\r"

‎Bạn có thể sử dụng nếu/khác mệnh đề trong hy vọng các kịch bản như thế này:‎--"Technology\r"

expect eofeof

Hướng dẫn su dung lenh autoexpect trong linux - su dung lenh autoexpect trong linux

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