expect 可以模拟⽤户⾏为做⼀些shell操作, 如ssh登陆远程服务器, 模拟⽤户执⾏ssh命令, 输⼊密码, 并在远程服务器上操作等模拟⽤户开启或重启nginx进程代码:
1 #!/usr/bin/expect -f
2 set n [exec ps -ef | grep nginx | grep -v grep | wc -l] #执⾏shell命令并将结果赋值给变量n 3 send_user $n #控制台输出n 4 if { $n>=1 } { #条件判断
5 spawn sudo nginx -s reload #执⾏命令 6 } else {
7 spawn sudo nginx 8 }
9 expect {
10 \"*password*\" { send \"123456a\\r\" } #输⼊密码11 }
12 interact
expect语法参考:
1. expect中的判断语句: 1. if { condition } {2. # do your things3. } elseif {
4. # do your things5. } else {
6. # do your things7. }
expect中没有⼩括号(),所有的if/else, while, for的条件全部使⽤⼤括号{}, 并且{ 与左边要有空格,否则会报错。另,else 不能单独占⼀⾏,否则会报错。2. 字符串⽐较
1. if { \"$node\" == \"apple\" } {2. puts \"apple\"
3. } elseif { \"$node\" == \"other\" } {4. puts \"invalid name\"5. exit 706. } else {
7. puts \"asd\"8. }
对⽐string,使⽤==表⽰相等, !=标⽰不相等。3. switch 语句
1. switch $location {
2. \"apple\" { puts \"apple\" }3. \"banana\" { puts \"banana\" }4. default {
5. puts \"other\"6. }7. }
记得左⼤括号{ 的左边要有空格,否则会报错4. 读取⽤户输⼊
1. expect_user -re \"(.*)\\n\"
2. send_user \"$expect_out(1, string)\\n\"
expect_user -re 表⽰正则表达式匹配⽤户按下回车前输⼊的所有字符expect_out(1, string) 表⽰第⼀个匹配的内容,即回车前所有字符expect_out(buffer) 所有的buffer内容5. break && continue
如c中⼀样,expect⼀样可以使⽤break && continue, 并且功能相同。注:只能⽤在循环中。6. 定义交互命令
1. # stick control + z in variable2. set ControlZ \\032
3. # stick control + c in variable
4. set ControlC \\x03
5. # define string embedded ctrl-z && tab6. set oddword foo\\032bar\gorp
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- niushuan.com 版权所有 赣ICP备2024042780号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务