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使用方法

浙公网安备 33010602011771号