Shell脚本攻略:expect脚本免交互

目录

目录

一、理论

1.Here Document

2.expect实现免交互

二、实验

1.实验一

2.实验二

3.实验三

4.问题


一、理论

1.Here Document

(1)概念

Here Document也被称为here-document/here-text/heredoc/hereis/here-string/here-script,在Linux/Unix中的shell中被广泛地应用,尤其在于用于传入多行分割参数给执行命令。除了shell(包含sh/csh/tcsh/ksh/bash/zsh等),这种方式的功能也影响和很多其他语言诸如Perl,PHP以及Ruby等。这篇文章以bash为例进行使用说明。

Shell脚本攻略:expect脚本免交互_第1张图片
(2)使用方式和限制

使用格式如下所示:

命令 << 分隔串(最为常见的为EOF)
字符串1
…
字符串n
分隔串

使用限制:

分割串常见的为EOF,但不一定固定为EOF,可以使用开发者自行定义的,比如LIUMIAO
缺省方式下第二个分割串(EOF)必须顶格写,前后均不可有空格或者tab
缺省方式下第一个分割串(EOF)前后均可有空格或者tab,运行时会自动剔除,不会造成影响

(3)基本用法

统计行

Shell脚本攻略:expect脚本免交互_第2张图片

read

Shell脚本攻略:expect脚本免交互_第3张图片

添加密码    EOF(合法字符)

Shell脚本攻略:expect脚本免交互_第4张图片

cat实现查看和重定向输出到指定文件

Shell脚本攻略:expect脚本免交互_第5张图片Shell脚本攻略:expect脚本免交互_第6张图片

外部免交互

Shell脚本攻略:expect脚本免交互_第7张图片

停止外部免交互

Shell脚本攻略:expect脚本免交互_第8张图片


 

(4)<<- 与 <<的区别

使用<<-代替<<唯一的作用在与分割串所扩起来的内容,顶格的tab会被删除,用于ident。

 去掉每行的tab字符(空格键无效)

Shell脚本攻略:expect脚本免交互_第9张图片

不输出

Shell脚本攻略:expect脚本免交互_第10张图片

2.expect实现免交互

(1)概念

建立在tcl(tool command language)语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互的相关问题,使用前需要安装(yum install  -y expect)。

Shell脚本攻略:expect脚本免交互_第11张图片

(2)expect基本命令

命令 功能
脚本解释器 expect 脚本中首先引入文件,表明使用的是哪一种shell。expect的为:/usr/bin/expect
spawn命令 用于捕捉关键词,后面常跟一个linux执行命令。
expect命令 用于判断上层捕捉输出的结果是否有指定字符,有则立即返回,没有则默认等待10s。
exp_continue命令 expect多分支判断时使用。
send命令 expect命令判断完成需要返回时,发送需要交互的指令,想要传递给电脑的文字或字符,该命令不能自动回车换行,\n和\r是回车。
set命令 可用于设置变量、设置expect超时时间,默认是10s。
set设置位置变量 set password  [lindex $argv 0] ,设置时从0开始,执行脚本时在脚本后跟参数即可。
结束符 expect eof 结束并返回原来环境,原来主机。
interact 结束但是不会返回原来的地方,保持当前状态,当前主机。

(3)安装expect

安装软件包

Shell脚本攻略:expect脚本免交互_第12张图片

赋权执行

Shell脚本攻略:expect脚本免交互_第13张图片Shell脚本攻略:expect脚本免交互_第14张图片

su切换用户

interact运行完保持

Shell脚本攻略:expect脚本免交互_第15张图片

Shell脚本攻略:expect脚本免交互_第16张图片

expect运行完退出

Shell脚本攻略:expect脚本免交互_第17张图片Shell脚本攻略:expect脚本免交互_第18张图片

bash嵌套expect

Shell脚本攻略:expect脚本免交互_第19张图片

Shell脚本攻略:expect脚本免交互_第20张图片

Shell脚本攻略:expect脚本免交互_第21张图片

⑥ ssh

Shell脚本攻略:expect脚本免交互_第22张图片

二、实验

1.实验一

监控脚本写一个函数库,用定时任务调用这个函数库,每个月1号执行

(1)脚本截图

主函数

Shell脚本攻略:expect脚本免交互_第23张图片

调用函数

(2)crontab计划任务

(3)运行结果

Shell脚本攻略:expect脚本免交互_第24张图片

2.实验二

ssh免交互登录,如果密码出错,也使用免交互的方式实现自动完成

(1)脚本截图

Shell脚本攻略:expect脚本免交互_第25张图片

(2)运行结果

密码输入错误

Shell脚本攻略:expect脚本免交互_第26张图片

密码输入正确

Shell脚本攻略:expect脚本免交互_第27张图片

3.实验三

使用fdisk给磁盘分区,格式化,挂载

(1)脚本截图

Shell脚本攻略:expect脚本免交互_第28张图片

(2)运行结果

Shell脚本攻略:expect脚本免交互_第29张图片

4.问题

linux系统或者掉盘的用户常常遭遇挂载磁盘报Structure needs cleaning(清理磁盘结构----格盘)的问题。

首先查看/dev/存储块是什么文件系统

在操作前请务必做好备份:

(1)ext4文件系统,使用命令  fsck.ext4 /dev/md0 修复,

(2)xfs文件系统,使用命令 xfs_repair -L /dev/md0修复,

一般情况修复后均可挂载,

但是如果磁盘有问题,或者阵列出问题时此种修复可能会失败,挂载时依然要求格盘,只能进行格盘了。

你可能感兴趣的:(linux,unix,bash)