shell中的自动交互方式(复习)

1.输入重定向
利用重定向操作符<< ,shell将分界符之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符结束

command << delimiter
document
delimiter

2.管道,echo + sleep + |
执行passwd命令后,输入curpassword,1秒后输入newpassword,1秒后再次输入newpassword,达到把当前用户的curpassword改成newpassword。

#!/bin/bash  
(echo "curpassword"  
sleep 1  
echo "newpassword"   
sleep 1  
echo "newpassword")|passwd 

也可以
这里写图片描述
3.expect命令
expect是建立在tcl基础上的一个工具,它可以让一些需要交互的任务自动化地完成。相当于模拟了用户和命令行的交互操作。
原理和工作机制:
首先使用 spawn 开启一个会话,然后使用 expect-send 对来执行交互式操作。
spawn 后面跟上一个命令操作,表示开启一个会话。expect 等待输出特定的字符串(通常是提示符),然后使用send 发送交互字符串。

expect "*assword" # 提示为:"username@host's password:", 等待用户输入密码
send "${password}\r" # 这时使用send模拟用户输入密码的字符串,完成登录验证

基本语法
1.脚本解释器:脚本中首先引入文件,表明使用的是哪一个shell

#!/usr/bin/expect

2.set:
设置会话超时时间为30s, 若不限制超时时间则应设置为-1

set timeout 30

设置变量:# 使用变量语句: param p a r a m 或 者 {param}({}用来避免param和后面的字符串拼接起来导致错误)

set param "param_str"
set param 1

4.spawn:spawn 后面跟一个命令,开启一个会话

spawn ${cmd} # for example : spawn su root

5.expect - send:expect 接收命令执行后的输出,然后和期望字符串匹配,若对应这执行相应的send来发送交互信息

expect "$case1" {send "$respond1\r"} 
expect "$case1"
send "$response1\r"

expect 可以有多个分支,就像switch语句一样。

expect 
{
"$case1" {send "$response1\r"}
"$case2" {send "$response2\r"}
"$case3" {send "$response3\r"}
}

send和send_user

send会将expect脚本中需要的信息发送给spawn启动的那个进程,而send_user只是回显用户发出的信息,类似于shell中的echo而已。

6.结束符:expect eof 与 interact 二选一即可

expect eof :等待执行结束,若没有这一句,可能导致命令还没执行,脚本就结束了 
interact : 执行完成后保持交互状态, 这时可以手动输入信息 

exp_continue:跳出本次循环

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值