shell免交互

目录

免交互

here Document 免交互

语法格式

注意事项

Expect免交互

转义符

基本命令格式

语法

结束符

exp_continue

嵌入执行模式

面试题


免交互

不需要人为控制就可以完成的自动化操作
自动化运维
shell脚本和免交互是一个概念,但是两种写法
shell 解释器是bash

here Document 免交互

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

语法格式


命令<<标记
内容
内容
标记


wc -l <<EOF
aaa
bbb
ccc
EOF

注意事项


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

Expect免交互

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

转义符

\n 表示换行
\t 制表符,TAB键
\r 回车
\b 退格符、删除键

基本命令格式

#!/usr/bin/expect
执行方式
1、必须赋权执行
chmod 777
2、bash sh 不能使用  只能用 ./

语法

spawn  后面通常跟一个linux的执行命令。表示开启一个会话,启动一个进程,并且跟踪后续的交互信息
spawn passwd lisi
expect :捕获,捕获上一次执行命令中,是否包含指定的字符串,如果有立即返回,否则等待超时时间,自动退出
expect 只能捕获有spawn 启动的进程输出
send 向进程发送字符串,用于模拟用户的输入,该命令不能自定回车,一般后面加一个回车键:\r或\n
第一种
expect "密码“{send”abc123\r"}
第二种
expect "密码" 
send"abc123\r"
第三种多分支结构
expect
{
"密码1"{send"abc123\r"}
"密码1"{send"abc123\r"}
"密码1"{send"abc123\r"}
}

只要匹配其中的一种情况,执行相应的send语句,然后expect语句

结束符

expect eof
会切换回之前的终端
interact
留在当前终端不变
set
设置超时等待时间,默认10秒
set timeout 5
5秒自动退出

exp_continue

可以在expect判断之后,继续匹配expect捕获的其他内容,类似于脚本continue,表示允许继续向下执行指令。
exp_continue  结束语句不能直接使用  expect eof,否则会报错

expect {
"(yes/no)"{send"yes\r",exp_continue}
"passwd"{send"123\r"}
}

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

接收参数:类似于shell当中的位置变量$1 $2
set 变量名 [lindex $argv 0] $1
set 变量名 [lindex $argv 1] $2

嵌入执行模式

/usr/bin/expect <<-EOF
嵌入执行模式:如果涉及终端切换,不要用嵌入模式

面试题

ssh 远程登录

工作中会有一个免交互的脚本,实现自动登录

#!/usr/bin/expect
set ip 192.168.70.22  指定远程登录的IP地址
set user root  指定root用户
set passwd 123 设定密码
set timeout 5
spawn ssh $user@$ip
#192.168.70.22
expect{
"yes/no"{send yes\r;exp_continue}
"passwd"{send "$password}

远程连接免交互

#!/usr/bin/expect
set timeout 5
set ip [lindex $argv 0]
set name [lindex $argv 1]
set passwod [lindex $argv 2]
spawn ssh $name@$ip
expect {
  "refused" {send_user "访问被拒绝\r"}
  "No route to host" {send_user "主机名或者IP地址有误\n"}
  "yes/no" {send "yes\r";exp_continue}
  "password" {send "$passwod\r"}
}
interact

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值