Shell编程之免交互

目录

Here Document免交互

Here Document常规用法 

Expect 基本命令

Expect执行方式

Expect案例

总结

 

 

 

免交互

 

Here Document 概述

 

使用I/O重定向的方式将命令列表提供给交互式程序或命令,比如ftp、cat 或read命令。

 

HereDocument是标准输入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出—个文件并用作命令的标住输入。

 

基本语法格式:

 

命令 <<标记

 

...

 

...

 

...

 

标记

 

 

 

特殊字符"<<"在标记和命令之前,这样做的目的是将命令块的输出重定向到程序或命令的

 

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

 

 

 

四点注意事项:

 

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

 

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

 

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

 

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

 

练习:

 

tee 也可以

 

 

变量替换

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

 

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

 

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

 

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

 

 

 

Expect概述

Expect
建立在tcl之上的一个工具

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

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

 

注意expect of 和interact只能二选一

 

set hostname [ lindex sargv 0 ]

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

 

用expect编写脚本

案例1:

 

案例2:

注意:一定要赋权才能执行

 

引用位置变量

还可以定义其他参数,例如超时时间,日志等

#超时时问
set timeout 20      //登陆超时多少秒退出

#开启日志文件
log_file test .log     //日志记录操作

#显示信息
log_user 1         //1为幕输出信息,0为不输出

 

嵌入执行模式,将expect过程融入shell 当中,方便执行和处理在shell脚本中调用expect

案例1:

 

 

 

 

利用expect完成FTP登录过程

 

另一台主机

yum install vsftpd -y 

systemctl start vsftpd

systemctl stop firewalld.service
setenforce 0

 

总结

Here Document使用方法

Expect基本命令

Expect使用方法

 

posted @ 2022-02-14 19:18  请叫喵总  阅读(61)  评论(0)    收藏  举报