shell脚本--免交互

1、概念

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

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

here document 免交互

语法格式:

命令 << 标记

内容

已开头的标记结尾

注意事项:

1、标记可以使用任意合法字符(字母和数字,一般不使用特殊符号,一般以字母开头,EOF )

2、结尾标记一定要顶格写而且结尾的标记前不能有任何字符(空格也不能有)

3、开头标记可以加空格,但是会被自动省略(开头标记前,一般也没有空格)

具体用法

统计文本行数

通过免交互给用户设置密码

对文本内容输入

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

通过整体赋值给变量

在标记上加上单引号无法赋值给变量

3、expect 免交互

自动化控制和测试,用来解决shell脚本当中交互问题

expect建立在tcl语言基础上(要想实现expect免交互先安装这个服务)

3.1、执行方式

.sh

./test.sh

/opt/test.sh

3.2、常用的转义字符

\n: 相当于换行,回车

\t : 制表符,相当于tab键

\r :就是回车键

\b:退格符(backspace)

3.3、使用方法

使用expect必须要先声明(#!usr/bin/expect)

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

expect 捕获 , 命令的相关内容,字符串匹配

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

send使用的三种方法

方法一:

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

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

方法二:

expect “密码”

send “123456\r”

换行不需要花括号

方法三:多分支匹配

expect {

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

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

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

}

结束符:

expect eof

表示交互结束,等待执行结束,退回到原来的用户

expect 默认等待时间10s(秒)

退回之前的终端

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

注意点:这两个结束符只能选择一个(二选一)

set 定义变量,设置参数

set timeout 5 设置等待时间5秒

set hostname [lindex $argr 0]

hostname=$1

set passwd [lindex $argv 1]

passwd=$2

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

格式:

expect {

”connecting (yes/no)?“ {send "yes\r"; exp_continue;}

}

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

脚本免交互修改密码(用户固定的)

脚本免交互修改密码(随意用户密码)

嵌入执行,将expect免交互的过程和shell结合起来

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

#!/bin/bash

user=$1

passwd=$2

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

useradd $user

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

/usr/bin/expect <<-EOF

#开启执行的表示,仅限于嵌入式

spawn passwd $user

expect "New*"

 send "${passwd}\r"

expect ""

 send "${passwd}\r"

expect eof

EOF

传参方式交互

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值