shell编程之面交互

Here Document

Here Document使用注意事项

面交互

面交互修改账号密码

root@localhost opt\]# passwd zhangsan \<\ abc1234 #下面两行是输入密码 \> abc1234 \> EOF 更改用户 zhangsan 的密码 。 新的 密码:无效的密码: 密码未通过字典检查 - 过于简单化/系统化 重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。 \[root@localhost opt\]# cat \<\ 6.repo \> \[6

> name=6

> baseurl=file:///mnt

> enabled=1

> gpgcheck=0

> EOF

我们搭建好yum仓库的时候 到时候用vim进行编译别的有关yum源仓库的时候可以直接使用6.repo这个文件就可以了 不用再手动敲入

Expect

我们操作系统一般不自带 这时候用yum安装这个文件

格式:

1.解释器:#!/usr/bin/expect

2.使用spawn指定交互命令 开启会话跟踪

3.使用expect 匹配交互命令的提示信息

4.再使用send 发送需要交互输入的字符串

5.所有交互操作完成后使用 expect eof 或使用 interact 结束交互会话

实验:

实现zhangsan用户面交互登录root

复制代码
[root@localhost opt]# useradd zhangsan
首先创建张三用户
[root@localhost ~]# yum install -y expect
然后yum安装软件包
[root@localhost opt]# vim 1.sh

创建以sh为结尾的文件
#!/usr/bin/expect

spawn su root
expect "密码:"  {send "abc1234\r"}
expect "*]#"    {send_user "root用户切换成功"}

interact
~

[root@localhost opt]# chmod 777 1.sh
给文件权限 
[root@localhost opt]# su zhangsan
切换张三用户
zhangsan@localhost opt]$ ./1.sh
运行脚本

注意我们用这个脚本切换的账户 会过20秒自动退出 这时候要加一条命令让他永久免交户切换

添加这条命令

expect直接执行

需要使用 expect 命令去执行脚本

复制代码
su切换用户
#!/usr/bin/expect
#设置超时时间
set timeout 5
#参数传入
set username [lindex $argv 0]
set password [lindex $argv 1]
#开始追踪命令
spawn su $username
#免交互执行,捕捉信息并匹配
expect "密码"
send "$password\r"
expect "*]#"
send_user "ok"
#把控制权交给控制台
interact
#expect eof

嵌入执行模式

将 expect 过程融入 Shell 当中,方便执行和处理。像ssh、su这种会切换环境的交互式命令一般不建议使用嵌入执行模式。

复制代码
创建用户并设置密码
#!/bin/bash
user=$1
password=$2
#非交互命令放在expect外面
useradd $user
#开始免交换执行
/usr/bin/expect <<-EOF        #expect 开始标志
spawn passwd $user             #开启一个进程跟踪 passwd 命令,expect 只能捕捉该进程信息
 
expect "新的*"                 
send "${password}\r"         
expect "重新*"     
send "${password}\r"         
expect eof                
EOF

tiati'a

相关推荐
xflySnail20 小时前
nas服务域名高速访问-DNS+ESA
运维·服务器·esa·无端口访问
赵民勇1 天前
Linux/Unix中install命令全面用法解析
linux·shell
苏宸啊1 天前
Linux指令篇(一)
linux·运维·服务器
睡不醒的猪儿1 天前
nginx常见的优化配置
运维·nginx
我要升天!1 天前
Linux中《网络基础》
linux·运维·网络
国强_dev1 天前
在数据库开发和运维中的“错误信息误导(Red Herring)”
运维·adb·数据库开发
安科瑞刘鸿鹏171 天前
工业自动化系统中抗晃电保护的协同控制研究
运维·网络·嵌入式硬件·物联网
ZStack开发者社区1 天前
ZStack Cloud 5.5.0正式发布
运维·服务器·网络
草莓熊Lotso1 天前
脉脉独家【AI创作者xAMA】|当豆包手机遭遇“全网封杀”:AI学会操作手机,我们的饭碗还保得住吗?
运维·开发语言·人工智能·智能手机·脉脉
鸽芷咕1 天前
【2025年度总结】时光知味,三载同行:落笔皆是沉淀,前行自有光芒
linux·c++·人工智能·2025年度总结