shell免交互

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

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

Here Document免交互:

使用i/o重定向的方式将命令的列表提供给交互式的程序或命令。是一种标准输入,也就是只能执行接收正确的指令或者命令。

语法格式:

命令  >>标记

......

......

标记                                    注意:两个标记要一一对应

例:

shell免交互_第1张图片

 3的意思就是输入了三行

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

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

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

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

例:cat结合免交互重定向输出到指定文件

shell免交互_第2张图片

 

变量替换:

shell免交互_第3张图片

 

 整体赋值变量:

shell免交互_第4张图片

 

 

面试:

Expect免交互:tcl语言基础之上的一种工具,用于自动化测试和控制,为了在脚本中解决交互的问题。Expect需要在线yum源安装

rpm  -q  expect

yum -y  install  expect

转义符:\n  换行        \t  制表符,相当于tab       \r 相当于回车        \b 删除键

基本命令格式  #!usr/bin/expect   声明用expect作为解释器,一定要写

执行方式:1、必须赋权执行     2、不能用bash.sh只能用./来执行

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

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

send:向进程发送字符串,用于模拟用户的输入,该命令不能自动回车,后面要添加\v或\n

格式一

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

格式二    不写在一行    

expect  "密码"

send  "abc123"

格式三   多分枝结构

 expect

{

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

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

}

捕获多个

特点:只要匹配其中一个情况,执行相同的send语句,然后退出expect语句

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

interacr:留在当前终端不变

set:设置超时等待时间,默认为10s

set  timeout  5

例:免交互实现修改密码

shell免交互_第5张图片

shell免交互_第6张图片 

 

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]$1

set  hostname[lindex  $argv  1]$2

例:通过传参的方式来切换用户(普通和root用户)

shell免交互_第7张图片

 

嵌入执行模式

将 expect 过程融入 Shell 当中,方便执行和处理。
像ssh、su这种会切换环境的交互式命令一般不建议使用嵌入执行模式。

shell免交互_第8张图片

 

ssh远程登录,工作中会用一个免交互的脚本,实现免交互自动登录

shell免交互_第9张图片

 

你可能感兴趣的:(交互)