Here Document概述
定义:Here Document是标准输入的一种替代品,使用I/O重定向的方式将命令列表提供给交互式程序。
用途:帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个文件并用作命令的标准输入。
Here Document使用注意事项
标记可以使用任意合法字符
结尾的标记一定要顶格写,前面不能有任何字符
结尾的标记后面也不能有任何字符(包括空格)
开头标记前后的空格会被省略掉
交互式代码
设置一个用户给用户设置密码
[root@bogon ~]# useradd zhangsan
[root@bogon ~]# vi test.sh
#!/bin/bash
passwd zhangsan <<EOF
123
123
EOF
[root@bogon ~]# sh test.sh
Here Document变量设定
变量替换:在 Bash 脚本中,变量替换是一种强大的特性,它允许你根据变量的当前值来修改或操作它们
变量设定:在 Bash 脚本中,Heredoc(Here Document)是一种重定向机制,它允许你将多行文本传递给命令、函数或脚本块。Heredoc 通常与 cat 命令一起使用来创建多行文件内容,但它也可以与其他命令一起使用,用于提供输入
Here Document格式控制
关闭变量替换功能
去除每行之前的TAB字符
示例
[root@bogon ~]# cat test.sh
#!/bin/bash
:<<EOF
可以用于多行注释
可以用于多行注释
可以用于多行注释
EOF
Expect概述
Expect是一个免费的编程工具语言,主要用于实现自动和交互式任务进行通信,而无需人的干预。它允许系统管理员编写脚本来自动执行那些通常需要人工交互的命令或程序。
主要特点
自动化交互:Expect能够模拟用户的输入,与需要人工交互的命令或程序进行通信,从而实现自动化操作。
脚本编写:使用Expect语言,管理员可以编写脚本来执行复杂的任务,包括登录到远程系统、执行命令、处理输出等。
支持多种平台:Expect可以在多种Unix和类Unix系统上运行,如Linux、BSD、Solaris等。
基本语法
Expect的语法包括expect命令、send命令、spawn命令等。其中,spawn命令用于启动一个进程,expect命令用于等待进程的特定输出,send命令用于向进程发送输入
代码示例操作
[root@bogon ~]# yum -y install expect
#开启两台虚拟机
[root@bogon ~]# vi test.sh
#!/usr/bin/expect
spawn ssh [email protected]
expect "*(yes/no)*" { send "yes\r"}
expect "*password*" { send "123456\r" }
expect "*#" { send "ifconfig ens33 \r" }
interact
[root@bogon ~]# ./test.sh
或者
[root@bogon ~]# vi test.sh
#!/usr/bin/expect
set timeout 50
spawn ssh [email protected]
expect {
"(yes/no)"
# 匹配的(yes/no)时自动输入yes,exp_continue 表示允许 expect 继续向下执行指令
{send "yes\r"; exp_continue}
"*password"
{send "123456\r"}
}
expect "*#" { send "ifconfig ens33 \r" }
interact
设置一个新用户并且设置密码
[root@bogon ~]# vi kgc1.sh
#!/bin/bash
user=$1
password=$2
useradd $user
expect << EOF
# 开启一个进程跟踪 passwd 命令,expect 只能捕捉该进程信息
spawn passwd $user
# 匹配输出信息"New password:"
expect "新的 密码:"
# 自动输入密码
send "${password}\r"
# 匹配输出信息"Retype new password:"
expect "重新输入新的 密码:"
# 自动输入密码
send "${password}\r"
# 等待结束标记
expect eof;
EOF
[root@bogon ~]# ./kgc1.sh zhaoliu 123
useradd:用户“zhaoliu”已存在
spawn passwd zhaoliu
更改用户 zhaoliu 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
Shell 脚本为自动化任务和减少用户交互提供了强大的工具。通过了解和使用 Shell 脚本的特性和功能,你可以创建出能够处理各种任务的强大脚本,而无需用户手动干预。在编写脚本时,请始终考虑安全性、可维护性和可读性,以确保你的脚本能够可靠地执行并易于其他人理解