今天小编就为大家带来shell编程中expect免交互的文章。小编觉得挺不错的,为此分享给大家做个参考。一起跟随小编过来看看吧。
备注:
expect “要捕捉的内容” {send "要输入的参数\r";}
\r 回车符
[root@localhost ~]# vim a.sh #!usr/bin/ecpect //expect二进制文件的路径, #设置环境 #超时时间 set timeout 9 //设置超时时间 log_file test.log //日志文件路径 log_user 1 //用户数量为1 #定义变量 set hostname [lindex $argv 0 ] set password [lindex $argv 1 ] #开启追踪spawn spawn ssh root@$hostname //spawn 启动命令 #匹配条件,捕捉 expect { //按条件捕捉去send执行 "(yes/no)" {send "yes\r";exp_continue} "*passwor" {send "$password\r"} } #权限转交控制台 interact [root@localhost ~]# chmod +x a.sh [root@localhost ~]# ./a.sh $argv0 $argv1
interact不要写在大括号里面
[gsy@localhost root]$ which expect /usr/bin/expect
两个log可加可不加
set两个变量代表着传参
然后以spawn 去开启服务
exprct 去捕捉条件,中间send输出指令,\r回车,exp_continue继续匹配
[root@localhost ~]# vim b.sh #!/bin/bash hostname=$1 password=$2 /usr/bin/expect<<-EOF //expect开始EOF标志 spawn ssh root@$hostname expect { "(yes/no)" {send "yes\r";exp_continue} "*password" {send "$password\r"} } expect "*]#" //检索是否以root登陆 send "exit\r" expect eof EOF //exprct结束标志,这个EOF不能有空格 [root@localhost ~]# source b.sh
java的全局变量指的是类文件为区域
shell的是所有bash环境都能识别
/usr/bin/expect<<-EOF 也可以视为声明expect 位置
spawn :以spawn模式执行操作,expect 才可以捕捉到
[root@localhost ~]# vim b.sh #!/bin/bash user=$1 mima=$2 /usr/bin/expect<<-EOF spawn useradd $user spawn passwd $user expect { "New password" {send "$mima\r";exp_continue} "new password" {send "$mima\r"} } expect eof EOF [root@localhost ~]# chmod +x b.sh [root@localhost ~]# ./b.sh qqq 965483 spawn useradd qqq spawn passwd qqq Changing password for user qqq. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. [root@localhost ~]# vim b.sh [root@localhost ~]# id qqq uid=1001(qqq) gid=1001(qqq) groups=1001(qqq)
正常登录
想要注释多行语句 可以在首部输入 :<<! 在尾部输入!
以上就是shell编程expect免交互的方法介绍,详细使用情况还得要大家自己使用过才能知道具体要领。如果想了解更多相关内容,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。