本文详解Shell编程如何实现免交互

shell编程之免交互(shell脚本) Here Document 概述。 阅读详情

一.Here Document

1.Here Document概述

使用I/O重定向的方式将命令列表提供给交互式程序
标准输入的一种替代品

语法格式
命令 <<标记
...
...
标记

2.Here Document使用注意事项

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

3.Here Document免交互

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

[root@server ~]# vi here_non_interactive_read.sh
#!/bin/bash
read i <<EOF
hi
EOF
echo $i

[root@server ~]# sh here_non_interactive_read.sh
hi

通过passwd给用户设置密码

[root@server ~]# vim here_non_interactive_passwd.sh
#!/bin/bash
passwd lisi <<EOF
abc123
abc123
EOF
[root@server ~]# useradd lisi
[root@server ~]# sh here_non_interactive_passwd.sh
更改用户 lisi 的密码 。
新的 密码:无效的密码: 密码少于 7 个字符
重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。

4.Here Document变量设定

变量替换

[root@server ~]# vi here_var_replace.sh
#!/bin/bash
doc_file="2020.txt"
i="company"
cat > $doc_file << HERE
this is $i
HERE
[root@server ~]# sh here_var_replace.sh
[root@server ~]# cat 2020.txt
this is company

变量设定

[root@server ~]# vim here_var_set.sh
#!/bin/bash
ivar="Great Beautiful"
myvar=$(cat <<EOF
This is line 1.
That are sun,moon and stars.
$ivar
EOF
)
echo $myvar
[root@server ~]# sh here_var_set.sh
This is line 1. That are sun,moon and stars. Great Beautiful

5.Here Document格式控制

关闭变量替换功能

[root@server ~]# vim here_forcat_shut.sh
#!/bin/bash
a=123456
cat <<'EOF'				//单引号关闭变量替换
this is line 1
$a
EOF
[root@server ~]# sh here_forcat_shut.sh
this is line 1
$a

去除每行之前的TAB字符

[root@server ~]# vi here_tab.sh
#!/bin/bash
a=123456
cat <<-'EOF'				//-表示抑制行首的TAB作用
        This is line 1
        $a
EOF
[root@server ~]# sh here_tab.sh
This is line 1
$a

6.Here Document多行注释

通过Here Document方式使Bash支持多行注释
语法格式
:<<DO-NOTHING
第一行注释
第二行注释
......
DO-NOTHING

示例
[root@server ~]# vim here_multi.sh
#!/bin/bash
:<<BASH-HERE
this is line 1
this is line 2
BASH-HERE
echo "exec string"
[root@server ~]# sh here_multi.sh
exec string

二.Expect

1.Expect概述

Expect
建立在tcl之上的一个工具
用于进行自动化控制和测试
解决shell脚本中交互相关的问题

2.Expect安装

挂载光盘
制作本地YUM源
执行安装命令
[root@server ~]# yum -y install expect
......
已安装:
  expect.x86_64 0:5.45-14.el7_1

作为依赖被安装:
  tcl.x86_64 1:8.5.13-8.el7

3.基本命令

expect
	判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回
	只能捕捉spawn启动的进程的输出
	用于接收命令执行后的输出,然后和期望的字符串匹配
send
	向进程发送字符串,用于模拟用户的输入
	该命令不能自动回车换行,一般要加\r(回车)
spawn
	启动进程,并跟踪后续交互信息
结束符
	expect eof		//执行自动化任务通常使用expect eof
	等待执行结束
	interact
	执行完成后保持交互状态,把控制权交给控制台
set
	设置超时时间,过期则继续执行后续指令
	单位是秒
	timeout -1表示永不超时
	默认情况下,timeout是10秒
exp_continue
	允许expect继续向下执行指令
send_user
	回显命令,相当于echo
接收参数
	Expect脚本可以接受从bash传递的参数
	可以使用[lindex $argv n]获得
	n从0开始,分别表示第一个、第二个、第三个...参数

4.Expect语法

单一分支语法
expect "password:" {send "mypassword\r";}
多分支模式语法
expect "aaa" {send "AAA\r"}
expect "bbb" {send "BBB\r"}
expect "ccc" {send "CCC\r"}
//Send命令不具备回车换行功能,一般要加\r或\n

expect eof {
"aaa" {send "AAA\r"}
"bbb" {send "BBB\r"}
"ccc" {send "CCC\r"}
}
//只要匹配了aaa或bbb或ccc中的任何一个,执行相应的send语句后退出该expect语句

expect {
"aaa" {send "AAA\r";exp_continue}
"bbb" {send "BBB\r";exp_continue}
"ccc" {send "CCC"}
}
//exp_continue表示继续后面的匹配,如果匹配了aaa,执行完send语句后还要继续向下匹配bbb

5.Expect执行方式

直接执行

[root@localhost ~]# more test.sh
#!/usr/bin/expect		//Expect二进制文件的路径
	set timeout 60		//超时事件60秒
	log file test.log		//开启日志
	log_user 1		//显示信息    0不显示
	set hostname [lindex $argv 0]		//定义变量
	set password [lindex $argv 1]
	spawn ssh root@$hostname		//追踪指令
	expect {		//捕捉提示信息
		"(yes/no)"
		{send "yes\r"; exp_continue}
		"*password"
		{send "$password\r"}
}
interact		//转交控制权
[root@localhost ~]# chmod a+x test.sh
[root@localhost ~]#./test.sh

嵌入执行

#!/bin/bash
hostname=$1
password=$2
/usr/bin/expect<<-EOF	//Expect开始标志
spawn ssh root@${hostname}
expect {
"(yes/no)"
{send "yes\r";exp_continue}
"*password:"
{send "$password\r";}
}
expect "*]#"
send "exit\r"
expect eof
EOF		//Expect结束标志,EOF前后不能由空格
Shell脚本之Expect免交互的实现 主要介绍了Shell脚本之Expect免交互的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 立即下载

相关推荐

【CarMaker实战指南】从零构建环形测试场景与车辆连续仿真

本文详细介绍了如何使用CarMaker软件从零构建环形测试场景与实现车辆连续仿真。通过分步指导搭建闭环道路、连接交叉路口、规划车辆轨迹等核心操作,帮助用户掌握CarMaker的基础应用技巧,并提供了常见问题排查与进阶优化建议,适用于车辆耐久性测试和自动驾驶算法验证等场景。

weixin_29274969的博客 234

注释多行shell命令

方法一: ' 被注释的多行内容 '方法二:&lt;&lt;eof 被注释的多行内容 eof方法三:&lt;&lt;! 被注释的多行内容 !方法四 if false ; then 被注释的多行内容 fi方法五(&amp;&amp;和||的就近原则)((0)) &amp;&amp; { 被注释的多行内容 }方法六: &lt;&lt; 字符 #这里的字符可以是数字或者字符都可以 被...

编程菜鸟进阶之路 1077

Geant4 案例分析(一): B1

本文是对Geant4 B1的案例分析,其中特定的功能不做介绍,而注重于各个文件的主要功能,以及它们组织的方式。

m0_51809467的博客 1582

理论+实操:shell编程之expect免交互

文章目录一 : expect 概述1.1 expect二 : expect 安装2.1 挂载光盘2.2 制作本地yum仓库2.3 执行安装命令三 : expect基本命令3.1 spawn : 启动进程,并跟踪后续交互信息3.2 expect3.3 send :向进程发送字符串,用于模拟用户的输入3.4 interact : 执行完成后保持交互状态,把控制权交给控制台3.5 Timeout :指定...

Lfwthotpt的博客 787

Zabbix安装与部署 系统环境:centos7.0

Zabbix安装与部署 系统环境:centos7.0

weixin_42485027的博客 2600

【SWAT水文模型】SWAT-CUP参数率定与模型验证实战指南

本文提供了SWAT水文模型参数率定与模型验证的完整实战指南。详细介绍了如何使用SWAT-CUP工具,特别是SUFI-2算法,进行自动化参数校准,并阐述了模型验证的关键步骤以避免过度拟合。内容涵盖从工程搭建、核心参数选择、迭代优化到结果分析与常见问题排查的全流程,旨在帮助用户提升SWAT模型模拟的准确性与可靠性。

weixin_29072299的博客 499

Shell 脚本之免交互操作

文章目录1. Here Document 免交互1.1 概述 1. Here Document 免交互 1.1 概述 Here Document 使用 I/O 重定向的方式将命令列表提供给交互式程序或命令,比如 ftp、cat 或 read 命令 是标准输入的一种替代品可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个 “文件” 并用作 “命令” 的标准输入 Here Document 也可以与非交互式程序和命令一起使用 格式: 命令 <<标记 ...... 传入的内

shenyuanhaojie的博客 3万+

一文带你看懂SAP-HANA的基本架构与原理

创作不易,希望大家一键三连支持!!!♥♥♥创作不易,希望大家一键三连支持!!!♥♥♥创作不易,希望大家一键三连支持!!!♥♥♥。

丷江南南的博客 5077

shell----免交互

shell 免交互shell一、Here Document二、Expect1.基本命令(1)脚本解释器(2 ) spawn(3) expect(4) send(5)结束符(6) set(7) exp_ continue(8) send_ user(9)接收参数2.使用总结 一、Here Document 使用I/O重定向的方式将命令列表提供给交互式程序 格式 命令<<标记 ... 内容 .... 标记 注意事项: 标记可以使用任意合法字符( 通常为EOF ) 结尾的标记一定要顶格写,前面不

记忆的博客 198

基于STM32设计的万能红外遥控器(学习型)

当前介绍了一种基于STM32微控制器设计的红外遥控器,支持接收解码功能和发送功能,可以将接收的码原样发送出去。 红外遥控器作为智能设备控制方式之一,在一定程度上满足了人们对于快速方便控制的需求。 当前设计的红外遥控器支持学习模式和发送模式。通过矩阵键盘上的数字键选择发送对应的控制码。 一共支持学习10个控制码,对应矩阵键盘上的数字。0~9。

6559

Python爬虫实战:利用最新技术爬取抖音话题挑战视频

本文将详细介绍如何使用Python最新技术栈构建一个高效的抖音话题挑战视频爬虫。我们将从环境配置开始,逐步讲解请求模拟、数据解析、反反爬策略、数据存储等关键环节,并提供完整的代码实现。本文适合有一定Python基础的开发者学习高级网络爬虫技术。关键词:Python爬虫、抖音API、话题挑战、视频爬取、反反爬本文详细介绍了如何使用Python最新技术栈构建抖音话题挑战视频爬虫。我们从基础请求开始,逐步实现了数据解析、反反爬策略、数据存储等核心功能,并探讨了分布式和增量爬取等高级主题。更智能的反反爬策略。

2201_76125261的博客 1744

shell编程之免交互的实现

shell免交互是指间接地通过第三方的方式把指令传送给程序,不用直接地下达指令。本章将详细介绍shell免交互。

Linux运维老纪的博客 1752

AUTOSAR MCAL开发及EB Tresos工具使用总结

在基于AutoSar CP架构开发MCAL时,会使用到EB tresos工具。本文主要对MCAL开发及EB tresos工具使用进行总结,仅作为自学使用,以方便后续查漏补缺。

liuxu324的博客 2628

Shell编程之免交互

建立在tcl语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互相关的问题用set关键字定义变量,变量名和变量的值中间用空格分开,其他用法与shell脚本一致。

2301_76445860的博客 1152

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Shell免交互编程

expect是建立在tcl语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互相关的问题,需要安装使用。在实际的生产环境中,有一个常用的场景就是批量配置集群无密钥登录。如果集群的机器数量很多,手动一台一台地去每台机器去配置无密钥是非常糟糕的事情。使用 expect 功能,可以远程登录机器,并通过交互方式进行无密钥登录。

ZZH1120KQ的博客 1166

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Shell 编程之免交互

Here Document 是一个特殊用途的代码块。它在 Linux Shell 中使用 I/O 重定向的方式将命令列表提供给交互式程序或命令,比如 ftp、cat 或 read 命令。Here Document 是标准输入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个文件并用作命令的标准输入。命令

m0_74860678的博客 1263

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

shell编程之免交互

shell编程之免交互一、Here Document 免交互1.1 相关概念1.2 语法格式1.3 注意事项1.4 示例1.4.1 免交互方式实现对行数的统计1.4.2 通过 read 命令接收输入并打印1.4.3 通过 passwd 给用户设置密码1.4.4 支持变量替换1.4.5 整体赋值给变量1.4.6 关闭变量替换的功能1.4.7 去掉每行之前的TAB字符1.4.8 多行注释二、Expect免交互2.1 基本命令2.1.1 脚本解释器2.1.2 spawn2.1.3 expect2.1.4 send

weixin_51725822的博客 2834

[Shell编程] Shell 编程之免交互

本文介绍了Linux Shell编程中实现自动化运维的两大免交互工具:HereDocument和expect。HereDocument适用于简单交互场景,通过I/O重定向为命令提供输入,支持变量替换、格式控制等特性,典型应用包括passwd设置密码、read命令输入等。expect工具则能处理复杂交互流程,如ssh自动登录,通过"匹配输出-发送输入"机制实现自动化控制。文章详细讲解了两种工具的基本语法、核心参数和实用案例,帮助初学者快速掌握Shell脚本自动化技巧,提升运维效率。

kura_tsuki的博客 1106

4 - Shell编程之Expect免交互

对于Linux操作系统中,有许多操作都会触及到交互(根据系统的指示做出相对应的操作满足操作者的需求),对于shell脚本的自动化运维,就要实现免交互来达到自动化运维的效果。交互:当计算机播放某多媒体程序的时候,编程人员可以发出指令控制该程序的运行,而不是程序单方面执行下去,程序在接受到编程人员相应的指令后而相应地做出反应。执行完成后保持交互状态,把控制权交给控制台,会停留在目标终端而不会退回到原终端,这个时候就可以手工操作了,interact后的命令不起作用,向进程发送字符串,用于模拟用户的输入;

2401_85983616的博客 1260

Shell编程 - 免交互

Shell编程 - 免交互免交互概述语法格式注意事项免交互示例免交互变量替换总结Expect免交互概述基础命令Expect执行方式实例 免交互 概述 使用I/O重定向方式将命令列表提供给交互式程序或命令,比如ftp、cat或read命令 标准输入的一种替代品可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生成出一个“文件”并用作“命令”的标准输入。Here Document 也可以与非交互式程序和命令一起使用 语法格式 命令 <<标记(EOF) … … 标记(EOF) 注意

Yusheng9527的博客 703

05 Shell 编程之免交互

Here Document是一个特殊用途的代码块。它在Linux Shell中使用I/O重定向的方式将命令列表提供给交互式程序或命令,比如 ftp、cat或read命令。Here Document是标准输入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个文件并用作命令的标准输入。它的基本语法格式如下。特殊字符“<<"在标记和命令之前,这样做的目的是将命令块的输出重定向到程序或命令的stdin。标记的选择要确保不会出现在其他地方,避免出现混淆;

m0_74210957的博客 766
上一篇: 详解iptables防火墙
下一篇: Shell编程之循环语句(for、while、until)
tanwenlong01
博客等级 码龄6年 26粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值