Bootstrap

Linux网络——shell编程之免交互

一、概述

使用I/O重定向的方式将命令列表提供给交互式程序,是标准输入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地 生产出一个文件并用作命令的标准输入,Here Document 可以与非交互式程序和命令一起使用

1.常用的交互程序:

read,ftp,passwd,su,sudo,fdisk等等

2.语法格式:

命令 <<标记
... #标记之间是传入内容
...
标记

注:
1.标记可以使用任意合法字符,但开始标记与结尾标记需要保持一致。(常用标记EOF,使用其他字母也可以)
2.结尾的标记一定要顶格写,前面不能有任何字符。
3.结尾的标记后面也不能有任何字符(包括空行)。
4.开头标记前后的空格会被省略掉。

二、Here Document常规用法

1.read 命令的读取

read a <<EOF
>hello world
>EOF

在这里插入图片描述

2.wc -l 的内容行数统计

在这里插入图片描述

3.passwd用户密码的修改

passwd <<EOF
>密码
>密码
>EOF

在这里插入图片描述

4.cat 查看内容并输出到文件中

在这里插入图片描述

5.cat 查看交互内容并输出到新的文件中

在这里插入图片描述

6.交互内容中输出变量

在这里插入图片描述

三、Expect实现免交互运用

Expect 工具是一款使用 Tcl 语言编写的自动交互式应用程序工具,它可以模拟用户与交互式程序(如 Telnet、SSH、FTP、scp 等)之间的交互过程,从而可以实现自动化的测试、配置和管理等操作。Expect 工具可以根据预定的脚本,自动完成一系列的操作,减少人工干预,提高工作效率。

1.Expect 工具的主要特点

①.可以与任何交互式程序进行交互,包括 Telnet、SSH、FTP、scp 等;
②.支持自动化的测试、配置和管理等操作;
③.支持交互式操作,包括键盘输入、命令执行、输出读取等;
④.可以使用 Tcl 语言编写脚本,灵活性和可扩展性强;
⑤.支持多种平台,包括 Linux、Unix、Windows 等。

2.Expect 工具的安装

安装下载expect工具
yum install -y expect
检查expect安装包:
rpm -q expect
检查依赖包tcl:
rpm -q tcl

三、Expect免交互的脚本运用

1.示例一:免交互预设值修改用户密码

#!/usr/bin/expect            ##引入expect工具

set timeout 5                ## 设置超时时间为5秒,默认情况下是 10 秒

spawn passwd ztm             ## spawn追踪后面指令产生的交互过程
expect "新的 密码"            ## 匹配交互过程中的提示信息,这里要完全一致,否则会匹配不到
send "123456\r"              ## 相当于 echo,传送在该交互中的预设值 
expect "重新输入新的 密码"
send "123456\r"

expect eof                   ## 结束符

在这里插入图片描述

2.示例二:通过位置变量传入获取值,修改用户密码

#!/usr/bin/expect

set username [lindex $argv 0]
set password [lindex $argv 1]

spawn passwd $username
expect "新的 密码"
send "$password\n"
expect "重新输入新的 密码"
send "$password\n"

expect eof

在这里插入图片描述

;