免交互操作

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

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

here Document  使用I/O重定向的方式将命令的列表提供给交互式的程序或者命令。

命令格式:

        命令 <<标记,通常是EOF

        ...

        ...

        标记,通常是EOF

注意:

  1. 标记可以使用任意合法字符(通常用EOF作为标记)
  2. 结尾的标记一定要顶格写
  3. 结尾的标记后面也不能有任何字符,包括空格。
  4. 如果开头的标记前有空格,这个空格会被自动省略
  5. 内部只能无视tab,且调用无效

Expect免交互(需要安装):

        Tcl语言基础之上的一种工具,主要是用来自动化测试和控制,在脚本中解决交互问题。

转义符:

        \n 换行

        \l 制表符,tab

        \r 回车

        \b 删除键

基本命令格式

#!/usr/bin/expect

执行方式:

  1. 必须赋权执行
  2. Bash,sh都不行,只能./

语法:

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

        Expect 捕获上一次执行的命令中是否包含指定的字符串。如果有就立即返回,否则等待超时时间,自动退出。默认超时时间10s,只能捕获由spawn启动的命令或进程

        Send  向进程发送字符串,用于模拟用户的输入该命令不能自动回车,一般后面要加一个回车键

第一种写法:

Expect “密码” {send “abc123\r”}

第二帧写法:

expect “密码”

send “abc123\r”

第三种写法:多分支结构(只要匹配一个情况就会执行相应的send语句,然后退出expect):

expect

{

”密码1“ {send ”abc123\r“}

”密码2“ {send ”abc123\r“}

”密码3“ {send ”abc123\r“}

}

结束符:

        expect eof  会切换回原来的终端

        Interact  留在当前终端不变

        设置超时等待时间:默认10,永不超时-1  set timeout 5

        exp_continue 可以在expect判断之后继续匹配expect捕获的其他内容,表示允许继续向下执行指令。结束语句不能使用expect eof

        Send_user回显信息,相当于echo

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

                set hostname [lindex $argv 0]       $1

                set hostname [lindex $argv 1]       $2

若要在shell中嵌入,则需要一下这样写:

        /usr/bin/expect <<-EOF

        ...

        expect eof

        EOF

        若涉及终端切换则不要用该写法。

你可能感兴趣的:(linux)