shell之免交互

一、免交互:

也就是不需要进入到文件内部,可以在文件外对文件内容进行操作

sed最强大的功能:改、新增

awk最强大的功能:按行取列

1、如何对文本内容进行免交互:

here document 免交互

对文本内容进行操作:

标准输入的替代品

语法格式:

命令(linux命令) <<标记1

内容

标记1(开头是什么结尾就是什么标记)

格式使用注意事项:

  1. 标记可以使用任意合法字符(字母和数字,一般不使用特殊符号。一般以字母为开头。一般用EOF作为标记)
  2. 结尾标记一定要顶格写,而且在结尾的标记前面不能有任何字符(空格也不能有)
  3. 开头的标记可以加空格,但是会被自动省略(开头标记前一般也没有空格)

tee 本身就具有标准输出的作用,可以直接把内容输入到文件中

免交互也能传参:

通过整体赋值给一个变量:

去掉每行之前的tab字符

expect免交互。

自动化控制和测试,解决shell脚本中的相关交互问题

expect是建立在tcl语言基础上的工具

必须要先声明:(whereis expect)

#!/usr/bin/expect

执行方式:必须赋权执行,chmod 777

./test.sh或者绝对路径执行

常用的转义字符:

\n:相当于换行,理解为打了一个回车键

\t:制表符,相当于打了一个tab键

\r:和\n差不多,都是换行,\r就是回车

\b:退格符 backspace

spawn:声明命令

spawn后面一般都是linux命令,表示开启会话或者进程,而且跟踪后续的交互信息。

如:spawn passwd root

expect:捕获spawn命令结果内容和字符串匹配,

send:发送指令,模拟用户的输入

方法一:

expect “密码” {send “123456\r”}

写在一行必须要用花括号括起来

方法二:
expect “密码”

send “123456\r”

换行写不需要花括号

方法三:多分支匹配模式

expect

{

“密码1” {send “123456\r”}

“密码2” {send “123456\r”}

“密码3” {send “123456\r”}

}

send用来模拟用户输入的

结束符:

expect eof:表示交互结束,等待执行结束,会退回原来的用户(expect默认等待时间10s)。退回之前的终端

interact:执行完成之后保持状态,把控制权交给控制台,停留在目标终端,不会退回原终端

注意:以上两个结束符只能二选一

set可以定义变量和设置参数

set timeout 5 设置等待时间5s

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

set passwd [lindex $grgv 1] 相当于passwd=$2

exp_continue

和expect捕获命令结合一起使用,附加在expect判断项之后,匹配到expect的捕获内容之后,还能够继续判断expect捕获语句中的其他选项

格式:

expect {

“connecting (yes/no)?” {send “yes\r”;px

}

send_user:回显命令,跟echo一样,打印内容

嵌入执行模式:

将expect免交互和shell脚本相结合

ssh和su等涉及终端切换,不建议使用嵌入式执行

1、嵌套执行必须要声明:

#!/bin/bash

2、不需要交互的命令可以放在expect外面执行

3、密码环节我们开始执行免交互

4、开启执行的标志,仅限于嵌入式

/usr/bin/expect <<-EOF

工作中的免交互:

ssh自动登录:

传参的方式执行:(自定义用户密码)

练习:

使用免交互的方式实现硬盘分区 格式化 挂载(连挂载目录一并创建好)

免交互总结:

here document 主要是用在文本文件,免交互给文本文件输入内容

格式:

linux命令 <<EOF(可自定义标识)

输入的内容

EOF(以什么开头以什么结尾)

可以用

1、

cat <<EOF> test.txt

内容

EOF

2、

tee test.txt <<EOF

内容

EOF

expect:

开头要声明解释器:#!/usr/bin/expect

set 传参 设置参数

set timeout 5 超时时间5s

set hostname [lindex $argv 0]  相当于位置变量$1

spawn passwd test

#开启命令或者进程

expect

#捕获命令关键字

一律用引号引起来

“密码” send “123456\r(或者\n)”

结束符:

expect eof 返回上一次执行的终端

interact 停留在当前终端,interact后面的命令不会执行

嵌入式:expect和shell结合

主要作用:为了解决shell脚本中的交互问题

涉及终端切换,一般不使用嵌入式执行

shell当中执行不需要交互的命令,需要交互的执行交给expect

在shell脚本中开启免交互:

#!/bin/bash

/usr/bin/expect <<-EOF

注意:结束符写在EOF之前

interact

EOF

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值