shell免交互

免交互:

  • 不需要人为控制就可以自动化完成的操作

Here Document 免交互

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

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

语法格式:

例: wc -l <

> 123 

> EOF 

1

 注:两个标记要对应 

注意事项:
  1. 标记可以使用任意合法字符(通常为EOF)

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

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

  4. 开头标记前后的空格会被省略掉

Expect免交互:

  • 建立在tcl语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互相关的问题。

  • 需要安装expect服务 yum install -y expect

常用转义符:

\n:换行
\t:制表符——TAB键
\r:回车
\b:删除键

脚本格式:

expect 脚本中必须先声明:#!/usr/bin/expect

执行方式

必须要chmod赋权后 ./ 执行

语法:

(1)spawn

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

(2)expect

判断上次执行的命令中是否包含指定的字符串,如果有则立即返回,否则等待超时时间自动退出 (默认10秒);只能捕捉由spawn启动的进程的输出

(3)send

向进程发送字符串,用于模拟用户的输入;该命令不能自动回车换行,一般要加\r或者\n

写法:

方式1、 同一行send部分要有{}
expect "密码" {send "abc123\r"}
方式2、 多行send部分不需要{}
expect "密码"
send "abc123\r"
方式3、  只要匹配了其中一个情况,执行相应的send语句后退出该expect语句
expect {
"密码1" {send "abc123\r"}
"密码2" {send "123456\r"}
"密码3" {send "123123\r"} }
}

结束符:

expect eof :会切换回之前的终端

interact :留在当前终端不变

(expect eof 与 interact 只能二选一)

set :设置超市等待时间,默认十秒

命令: set timeout 5

例:免交互修改用户密码 
 vim 1.sh
#!/usr/bin/expect      #声明使用的shell
set timeout 5          #设置超时时间5秒
spawn passwd hh        #spawn后面更上修改命令和用户
expect "密码"           #捕获内容 “密码”
send "123456\r"        #输入密码123456 \r表示自动回车  
expect "新密码"         修改密码需要输入两次,所以要再捕获输入一次
send "123456\r"
expect eof             #结束语,这里不涉及到切换终端,所以expect eof 或者 interaet都可以
wq!
chmod 777 1.sh         #赋权
./1.sh                 #执行

补充:

exp_continue :

可以在expect判断之后,可以继续匹配expect捕获的其他内容

类似于控制语句中的 continue 语句。表示允许 expect 继续向下执行指令

注意:使用exp_continue时的结束语不能 直接使用expect eof,否则会报错

send_user:

表示回显命令,相当于 echo打印的功能

接收参数:类似于shell中的位置变量

set  hostname  [lindex $argv 0]     相当于 hostname=$1
set  password  [lindex $argv 1]     相当于 password=$2

嵌入执行模式:

将 expect 过程融入 Shell 当中,方便执行和处理

#!/bin/bash
​
  内容  (非交互的命令)
​
/usr/bin/expect <<-EOF             #expect开始的标志
sepect……
send……
结束符
EOF   标记

你可能感兴趣的:(microsoft,服务器,运维)