Shell编程之免交互

目录

一、Here Document免交互

1.1.Here Document 概述

1.2.基本语法格式

1.3.案例

1.4 Here Document 变量设定 

 1.5 格式控制

1.6 多行注释 

二、Expect

2.1 Expect 定义

2.2 Expect 安装

 2.3 Expect 相关命令

2.4 实例


一、Here Document免交互

1.1.Here Document 概述

使用I/O重定向的方式将命令列表提供给交互式程序或命令,比如 ftp、cat或read 命令。
HereDocument是标准输入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个文件并用作命令的标准输入
 

1.2.基本语法格式

命令<<标记
...
...
...
标记

特殊字符"<<"在标记和命令之前,这样做的目的是将命令块的输出重定向到程序或命令的stdin。标记的选择要确保不会出现在其他地方,避免出现混淆;两个标记之间的内容被当做是一个文件并用作"命令"的标准输入。另外Here Document也可以与非交互式程序和命令一起使用。

四点注意事项

标记可以使用任意的合法字符;

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

结尾的标记后面也不能有任何字符(包括空格);

开头的标记前后的空格会被省略;

1.3.案例

直接把输入的命令行输出

将输入的内容保存到文件 

追加内容输入保存到文件

 

1.4 Here Document 变量设定 

Here Document 也支持使用变量,如果标记之间有变量被使用,会先替换变量值。如 果想要将一些内容写入文件,除了常规的方法外,也可以使用 Here Document。如果写入 的内容中包含变量,在写入文件时要先将变量替换成实际值,在结合 cat 命令完成写入

示例:

在写入文件时会先将变量替换成实际值,再结合cat 命令完成写入

支持变量替换
在写入文件时会先将变量替换成实际值,再结合 cat 命令完成写入

 

 

 整体赋值给一个变量,然后通过 echo 命令将变量值打印出来

 

 1.5 格式控制

关闭变量替换的功能,按照字符原本的样子输出,不做任何修改或替换

示例:

关闭变量替换: 对标记加单引号,即可关闭变量替换

去掉每行之前的 tab 字符
在第一行的标记前面加 ‘-’,这个表示要抑制各行首 tab 的作用

 

 

1.6 多行注释 

Bash 的默认注释是 “#” ,该注释方法只支持单行注释,在shell 脚本的工作中,"#"右侧的任何字符串,bash都会将其忽略。Here Document 的引入解决了多行注释的间题。
" : " (冒号) 代表什么都不做的空命令。中间标记区域的内容不会被执行,会被bash 忽略掉,因此可达到批量注释的效果.

 

二、Expect

2.1 Expect 定义

  1. 建立在tcl之上的一个工具

  2. 用于进行自动化控制和测试

  3. 解决shell脚本中交互相关的问题

2.2 Expect 安装

rpm -q expect

rpm -q tcl

yum install -y expect

 2.3 Expect 相关命令

脚本解释器

expect 脚本中首先引入文件,表明使用的事哪一种shell
#!/usr/bin/expect
spawn

spawn后面通常跟一-个Linux执行命令,表示开启一个会话、启动进程,并跟踪后续交互信息 例: spawn passwd root

expect

判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回;
只能捕捉由spawn启动的进程的输出;
用于接收命令执行后的输出,然后和期望的字符串匹配
send

向进程发送字符串,用于模拟用户的输入;

该命令不能自动回车换行,一般要加\r (回车)或者\n

结束符

1.expect eof

表示交互结束,等待执行结束,退回到原用户,与spawn对应

比如切换到root用户,expect脚本默认的是等待10s当执行完命令后,默认停留10s后,自动切回了原用户

2.interact

执行完成后保持交互状态,把控制权交给控制台, 会停留在目标终端而不会退回到原终端,这个时候就可以手工操作了,interact后的命.令不起作用;

比如interact后添加exit,并不会退出root用户。而如果没有interact则登录完成后会退出,而不是留在远程终端上。

使用interact会保持在终端而不会退回到原终端;

set

expect 默认的超时时间是10秒,通过set 命令可以设置会话超时时间,若不限制超时时间则应设置为-1

例子: set time out 30

exp_continue

exp_ continue 类似于控制语句中的continue 语句。表示允许expect 继续向下执行指令
send_users

表示回显命令与echo相同
接收参数

expect 脚本可以接受从bash命令行传递参数,使用 [lindex $argv n]获得。其中你从0开始,分别表示第一个,第二个,第三个…参数
set hostname [lindex $argv 0]
相当于hostname=$1

set password [lindex $argv 1]
相当于passswd=$2
 

2.4 实例

ssh无交互登录到远程服务器

 

在远程登录的服务器上进行操作后再退出 

 

ssh 免交互登录的第二种写法

 

 

 创建用户给与密码

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值