深入解析Expect脚本:自动化交互式任务从未如此简单!
expect 脚本总结。
关于一些基础知识和基础示例,可参考:
linux shell之expect 教程
expect实用示例
(1)声明函数和调用函数
-
- proc insertDebianUserIfNo {username password} {
- send "use mysql\r"
- expect "*Database changed*"
- send "select User from user where User='$username';\r"
- expect {
- "*Empty set*" {
- puts "数据库 $username 帐号不存在,尝试创建\n"
- send "create user '$username'@'localhost' identified by '$password';\r"
- expect "*Query OK*"
- send "flush privileges;\r"
- expect "*Query OK*"
- send "grant ALL PRIVILEGES ON *.* to '$username'@'localhost';\r"
- expect "*Query OK*"
- puts "数据库 $username 帐号创建成功\n"
- }
- "*1 row in set*" {}
- }
- }
复制代码
调用示例
-
- insertDebianUserIfNo $username $password
复制代码
以上是带参数的函数,不带参数如下:
proc insertDebianUserIfNo {} {
......
}
调用示例
insertDebianUserIfNo
(2)bash 脚本调用并传参
-
- ......
- mysql_default_user=`cat /etc/mysql/debian.cnf|grep user|head -n 1|awk '{print $3}'`
- mysql_default_pass=`cat /etc/mysql/debian.cnf|grep password|head -n 1|awk '{print $3}'`
- /usr/local/bin/init_mysql.expect.sh $mysql_default_user $mysql_default_pass
复制代码
接受参数的脚本文件 init_mysql.expect.sh 代码片段如下:
-
- #!/usr/bin/expect
- set timeout 6
- set username [lindex $argv 0] #地一个参数
- set password [lindex $argv 1] #地二个参数
- puts "username : $username password : $password\n"
- ......
复制代码
(3)多分支
-
- ......
- send "select User from user where User='$username';\r"
- expect {
- "*Empty set*" {
- puts "数据库 $username 帐号不存在,尝试创建\n"
- send "create user '$username'@'localhost' identified by '$password';\r"
- expect "*Query OK*"
- send "flush privileges;\r"
- expect "*Query OK*"
- send "grant ALL PRIVILEGES ON *.* to '$username'@'localhost';\r"
- expect "*Query OK*"
- puts "数据库 $username 帐号创建成功\n"
- }
- "*1 row in set*" {} #不做处理
- }
复制代码
|