目录
5.1 Here Document免交互
5.1.1 通过passwd命令给用户设置密码:
5.2. Expect免交互
5.2.1使用Expect自动登录FTP服务器
5.2.2 使用Expect实现免交互磁盘创建
5.1 Here Document免交互
Here Document是Shell编程中实现免交互的一种常用方法。它使用I/O重定向的方式,将一段文本(可以包含变量、命令等)作为输入传递给命令或程序。Here Document的基本语法格式如下:
命令 <<标记
输入内容...
标记
其中,表示输入的开始,而相同的标记(单独成行)则表示输入的结束。在命令和之间不能有任何字符(包括空格)。
5.1.1 通过passwd命令给用户设置密码:
为了避免在设置用户密码时的交互,可以使用Here Document将密码作为输入传递给passwd命令。
echo "新密码" | passwd --stdin 用户名
# 或者使用Here Document
passwd 用户名 <<EOF
新密码
新密码(确认)
EOF
5.2. Expect免交互
Expect是一个用于自动化交互式应用程序(如telnet、ftp、passwd等)的工具。它允许脚本根据程序的输出发送相应的输入,从而模拟用户与程序的交互过程。
基本命令:
- spawn:启动一个进程(通常是交互式程序)。
- expect:等待特定的输出(字符串或模式)。
- send:发送字符串到进程。
- interact:允许用户与进程进行交互。
5.2.1使用Expect自动登录FTP服务器
#!/usr/bin/expect -f
spawn ftp ftp.example.com
expect "Name \(ftp.example.com:(none)):"
send "用户名\r"
expect "Password:"
send "密码\r"
# 后续可以进行FTP操作,如cd、get、put等
interact
5.2.2 使用Expect实现免交互磁盘创建
步骤:
- 安装Expect:首先,确保你的系统上已经安装了Expect工具。在大多数Linux发行版中,你可以使用包管理器(如apt、yum或dnf)来安装。
- 编写Expect脚本:使用Expect脚本语言编写一个自动执行磁盘分区和格式化过程的脚本。
#!/usr/bin/expect -f # 磁盘设备名作为参数传入
set disk [lindex $argv 0] spawn fdisk $disk expect "命令(输入 m 获取帮助):"
send "n\r" # 创建新分区
expect "Select (default p):"
send "p\r" # 选择主分区
expect "(1-4, default 1):"
send "\r" # 默认第一个分区
expect "起始扇区"
send "\r" # 使用默认起始扇区
expect "Last"
send "+10G\r" # 设置分区大小为10G
expect "已设置为 Linux 类型"
send "w\r" # 写入分区表并退出
expect eof # 格式化分区(这里假设我们只对第一个分区进行格式化)
spawn mkfs.xfs $disk1
expect eof # 其他可能需要的步骤,如创建挂载点、挂载分区等