目录
目录
一、理论
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为例进行使用说明。
(2)使用方式和限制
使用格式如下所示:
命令 << 分隔串(最为常见的为EOF)
字符串1
…
字符串n
分隔串
使用限制:
分割串常见的为EOF,但不一定固定为EOF,可以使用开发者自行定义的,比如LIUMIAO
缺省方式下第二个分割串(EOF)必须顶格写,前后均不可有空格或者tab
缺省方式下第一个分割串(EOF)前后均可有空格或者tab,运行时会自动剔除,不会造成影响
(3)基本用法
统计行
read
添加密码 EOF(合法字符)
cat实现查看和重定向输出到指定文件
外部免交互
停止外部免交互
(4)<<- 与 <<的区别
使用<<-代替<<唯一的作用在与分割串所扩起来的内容,顶格的tab会被删除,用于ident。
去掉每行的tab字符(空格键无效)
不输出
2.expect实现免交互
(1)概念
建立在tcl(tool command language)语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互的相关问题,使用前需要安装(yum install -y expect)。
(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
①安装软件包
②赋权执行
③su切换用户
interact运行完保持
④expect运行完退出
⑤bash嵌套expect
⑥ ssh
二、实验
1.实验一
监控脚本写一个函数库,用定时任务调用这个函数库,每个月1号执行
(1)脚本截图
主函数
调用函数
(2)crontab计划任务
(3)运行结果
2.实验二
ssh免交互登录,如果密码出错,也使用免交互的方式实现自动完成
(1)脚本截图
(2)运行结果
密码输入错误
密码输入正确
3.实验三
使用fdisk给磁盘分区,格式化,挂载
(1)脚本截图
(2)运行结果
4.问题
linux系统或者掉盘的用户常常遭遇挂载磁盘报Structure needs cleaning(清理磁盘结构----格盘)的问题。
首先查看/dev/存储块是什么文件系统
在操作前请务必做好备份:
(1)ext4文件系统,使用命令 fsck.ext4 /dev/md0 修复,
(2)xfs文件系统,使用命令 xfs_repair -L /dev/md0修复,
一般情况修复后均可挂载,
但是如果磁盘有问题,或者阵列出问题时此种修复可能会失败,挂载时依然要求格盘,只能进行格盘了。