当前位置: 首页 > article >正文

chapter05-Shell编程之免交互笔记

​ chapter05-Shell编程之免交互

Here Document概述

使用I/O重定向的方式将命令列表提供给交互式程序
标准输入的一种替代品
主要作用是在命令执行过程中替代人为输入,类似于起临时文件的作用,只是比使用文件更方便灵活。
语法格式

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

与cat命令配合使用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Here Document使用注意事项

标记可以使用任意合法字符
结尾的标记一定要顶格写,前面不能有任何字符
结尾的标记后面也不能有任何字符(包括空格)
开头标记前后的空格会被省略掉

Here Document免交互

通过read命令接收输入并打印

[root@localhost ~]# vim here_non_interactive_read.sh 

[root@localhost ~]# vim here_non_interactive_passwd.sh 
#!/bin/bash
passwd jerry <<EOF
This_is_password		
This_is_password
EOF
[root@localhost ~]# chmod +x here_non_interactive_passwd.sh
[root@localhost ~]# ./here_non_interactive_passwd.sh
[root@localhost ~]# 

Here Document变量设定

变量替换

[root@localhost ~]# vim here_var_replace.sh
#!/bin/bash
doc_file="2019.txt"
i="company"
cat > $doc_file << HERE
Take him from home to $i
HERE
[root@localhost ~]# chmod +x here_var_replace.sh
[root@localhost ~]# ./here_var_replace.sh
[root@localhost ~]# cat 2019.txt 
Take him from home to company

案例

编写脚本,用以下内容覆盖dhcp配置文件
/etc/dhcp/dhcpd.conf

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

expect概述

是由 Don Libes 基于TCL(Tool Command Language )语言开发的,是一种脚本语言,主要应用于自动化交互式操作的场景。
借助expect处理交互的命令,可以将交互过程如ssh登录、ftp登录等写在一个脚本上,使之自动化完成。
尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率。

使用场景:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

expect安装

挂载光盘
制作本地YUM源
执行安装命令

[root@localhost ~]# yum -y install expect
[root@localhost~]# rpm -qa|grep expect
expect-5.45-14.el7_1.x86_64 
[root@localhost ~]# rpm -qa|grep tcl
tcl-8.5.13-8.el7.x86_64

expect用法

一般不直接使用expect命令,而是定义except脚本

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

直接使用expect命令

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

交互式使用expect

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

匹配多个条件时,也可以:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

expect脚本

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

expect脚本命令

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

send
向进程发送字符串,用于模拟用户的输入
该命令不能自动回车换行,一般要加 \r 或 \n
结束符
expect eof
等待执行结束
interact
执行完成后保持交互状态,把控制权交给控制台

set
设置超时时间,过期则继续执行后续指令
单位是秒
timeout -1表示永不超时
默认情况下,timeout是10秒
exp_continue
允许expect继续向下执行指令
send_user
回显命令,相当于echo

接收参数
expect脚本可以接受从bash传递的参数
可以使用[lindex $argv n]获得
n从0开始,分别表示第一个,第二个,第三个…参数

接收参数
expect脚本可以接受从bash传递的参数
可以使用[lindex $argv n]获得
n从0开始,分别表示第一个,第二个,第三个…参数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

案例2 ssh登录

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

案例3使用变量

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

案例4位置参数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

案例5 执行多个操作

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

expect执行方式

嵌入执行(shell脚本调用expect)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

案例6 批量登录主机并创建用户

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本章实验2:编写脚本实现自动下载

实验环境
再准备一台主机,作ftp客户端
安装expect工具和ftp客户端工具
需求描述
编写shell脚本实现自动下载
以匿名身份登录ftp服务器
切换到目录pub
下载test.txt文件

实验2提示

利用expect完成FTP登录过程
正常交互过程

expect脚本

[root@ce ~]# ftp 192.168.8.136
Connected to 192.168.8.136 (192.168.8.136).
220 (vsFTPd 3.0.2)
Name (192.168.8.136:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed
#!/usr/bin/expect -f
 set timeout 10
 spawn ftp 192.168.8.136
 expect "Name*"
 send "ftp\r"
 expect "Password:*"
 send "\r"
 expect "ftp>*"
 interact
 expect eof

ftp> cd pub
250 Directory successfully changed


#!/usr/bin/expect -f
set timeout 10
spawn ftp 192.168.8.136
expect “Name*”
send “ftp\r”
expect “Password:"
send “\r”
expect "ftp>

interact
expect eof



http://www.kler.cn/a/414951.html

相关文章:

  • uniapp中使用uni-forms实现表单管理,验证表单
  • PMP每日一练(三十八)
  • 【网络安全设备系列】12、态势感知
  • redis-cluster集群搭建
  • HarmonyOS4+NEXT星河版入门与项目实战(22)------动画(属性动画与显示动画)
  • java脚手架系列16-AI大模型集成
  • 【MySQL】MySQL中的函数之JSON_ARRAY_INSERT
  • 网络原理(一)—— http
  • Spring Web MVC(详解中)
  • 链表内指定区间反转
  • 如何使用 python 中 pandas 进行数据分析?
  • 学习笔记:黑马程序员JavaWeb开发教程(2024.11.29)
  • Git仓库迁移到远程仓库(源码、分支、提交)
  • CVE-2022-24124
  • OGRE 3D----3. OGRE绘制自定义模型
  • Centos 使用宝塔安装mysql详细步骤
  • 【第十一课】Rust并发编程(二)
  • Linux(ubuntu)系统的一些基本操作和命令(持续更新)
  • 平安科技大数据面试题及参考答案
  • React前端面试题详解(一)
  • 泷羽sec---shell作业
  • JVM系列之OOM实战
  • 【论文阅读】Federated learning backdoor attack detection with persistence diagram
  • idea新建springboot web项目
  • YOLOv8-ultralytics-8.2.103部分代码阅读笔记-autobatch.py
  • 【UE5 C++课程系列笔记】05——组件和碰撞