shell编程免交互

目录

Here Document 免交互

expect

语法:

结束符:

exp_continue

接收参数,类似于位置变量


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

Here Document 免交互

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

cat read 

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

格式:

shell编程免交互_第1张图片

shell编程免交互_第2张图片

 ​​

shell编程免交互_第3张图片

注意事项:

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

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

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

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

例题:修改用户密码

shell编程免交互_第4张图片

结合免交互实现重定向输出到指定文件

shell编程免交互_第5张图片

例题:

shell编程免交互_第6张图片

整体复制变量进行传参

shell编程免交互_第7张图片

 

 例题:去掉每行之前的tab字符

shell编程免交互_第8张图片

 

多行注释:

shell编程免交互_第9张图片

expect

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

 安装expect服务

rpm -q expect

yum -y install expect

转义符:

\n:换行

\t:制表符,TAB

\r:回车

\b:删除键

基本命令格式:

#!/usr/bin/expect //如果要使用,必须先声明解释器

执行方式:

1.必须赋权执行

chmod 777

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

语法:

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

spawn passwd lisi //开启修改密码的命令,并且跟踪passwd的执行情况

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

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

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

第一种写法:

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

第二种写法:

expect "密码"

send "abc123\f"

第三种:多分支结构

expect{

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

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

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

}

只要匹配其中一个情况,就会执行相应的send语句,然后退出expect语句。

结束符:

第一种:

expect eof

会切换回之前的终端

第二种:

保留在当前终端不变

interacr

set 设置超时等待时间 默认是10秒 //set timeout 5 (可以自己设置,如果超出5s,就会自动退出,不限制超时时间就写成-1)

例题:用passwd实现免交互代码

shell编程免交互_第10张图片

 shell编程免交互_第11张图片

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

shell编程免交互_第12张图片

例题:创建用户密码:

shell编程免交互_第13张图片

例题:免交互脚本,实现自动登录

shell编程免交互_第14张图片

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