shell免交互

免交互:不需要人为控制就可以完成的自动化操作

shell脚本和免交互是一个概念,但是是两种写法

here Document免交互:

使用i/o重定向的方式将命令的列表提供给交互式的程序或者命令

它是一种标准输入,只能接收正确的指令

格式:

命令 << 标记

.....

.....

标记

注意事项:

1.标记可以使用任意合法字符(通常用EOF)

2.结尾的标记一定要顶格写,前面不能有任何字符

3.结尾的标记后面也不能有任何字符,包括空格

4.如果开头的标记前有空格,这个空格会被自动省略

Expect免交互:

tcl语言基础上的一种工具,自动化测试和控制,目的是在脚本中解决交互的问题

\n:换行

\t:制表符,Tab

\r:回车

\b删除键

基本命令格式:

#!/usr/bin/expect

执行方式

1.必须赋权执行

2.不能用bash、sh只能用./

语法:

1.spawn:后面通常跟一个Linux的执行命令。表示开启一个会话,启动进程,并且跟踪后续的交互信息

spawn passwd hqy

2.expect:捕获,捕获上一次执行的命令中是否包含指定的字符串,如果有立即返回,否则等待超时后自动退出,默认超时时间为10s

expect只能捕获由spawn启动的进程输出

3.send:向进程发送字符段,用于模拟用户的输入。该命令不能自动回车,一般后面要加一个回车键:\r或\n

写法:

1.expect"密码"{send"abbc123\r"}

2.expect "密码"

send"abc\r"

3.多分支

expect

{

"密码1"{send"abc123\r"}

"密码2"{send"abc123\r"}

"密码3"{send"abc123\r"}

}

只要匹配启动一个情况,执行相应的send语句,然后退出expect语句

结束语:

expect eof

会切换回之前的终端

interact

留在当前终端不变

set timeout 5

set设置超时等待时间默认为10秒

exp_continue

可以在expect判断之后,继续匹配expect捕获的其他内容,类似于脚本中continue,表示允许继续向下执行命令

exp_continue结束语句不能使用直接expect eof,否则会报错

格式:

expect {

"(yes/no)"{send "yes\r";exp_continue}

"password"{send "123\r"}

}

send_user

回显信息,相当于echo跟上用户想要输出的内容

send_user ok

接收参数:类似于shell当中的位置变量:$1、$2

格式:

set hostname [lindex $argv 0]

set password [lindex $argv 1]

涉及到终端机切换不能使用嵌套使用

例题:ssh服务免交互:

#!/usr/bin/expect

set name [lindex $argv 0]

set ip [lindex $argv 1]

set password [lindex $argv 2]

set timeout 5

spawn ssh $name@$ip

expect {

"yes/no" {send "yes\n";exp_continue}

"password" {send "$password\n"}

"No route to host" {send_user "输入的ip地址不正确\n"}

"refused" {send_user "访问被拒\n"}

}

interact

你可能感兴趣的:(linux)