shell调用expect

本文介绍了一个使用Expect脚本来简化从普通用户切换到root用户的流程,并执行特定操作(如删除文件)后再切换回普通用户的例子。通过一个具体的Shell脚本和Expect脚本的配合使用,展示了如何自动完成这一系列任务。

expect的作用不再累述

 

下面是一个简单的shell调用expect脚本的例子

作用是从一个普通用户切换到root用户并做相关操作(删除root家目录下的myfile),然后切换回来

 

shell 脚本:  test.sh

 

#!/bin/sh

echo "test expect"


User=root
Passwd=mypass
File=myfile


./my.exp $User $Passwd $File


echo "test end"

 

 

expect 脚本:my.exp

 

#!/usr/bin/expect -f

set User [lindex $argv 0]
set Passwd [lindex $argv 1]
set File [lindex $argv 2]

spawn su - $User
expect "*password*"
send $Passwd
send "\n"
expect "*$"
send "rm -rf $File"
send "\n"
expect "*$"
send "exit\n"

expect eof
exit

 

 

 

### 如何在 Shell 脚本中使用 Expect 模块 #### 安装 Expect 工具 为了能够在 Shell 中利用 `expect` 实现交互式的自动化操作,首先需要安装 `expect`。对于基于 Debian 的 Linux 发行版,可以使用如下命令来完成安装: ```bash sudo apt-get install expect ``` 对于 Red Hat 或 CentOS 用户,则应运行: ```bash sudo yum install expect ``` #### 基础语法介绍 `expect` 是一种用于自动控制交互程序的语言,它允许编写脚本来模拟人类用户的输入行为。基本结构通常包括定义要匹配的内容以及相应的响应动作。 - **spawn**: 启动一个新的进程并准备与其通信。 - **expect**: 设置等待接收的数据模式。 - **send**: 向目标发送指定字符串作为输入。 这些指令构成了构建复杂交互逻辑的基础构件[^1]。 #### 示例:SSH 登录远程服务器 下面给出一段简单的例子展示如何创建一个能够自动登录到另一台计算机上的 shell 脚本,并执行某些特定的任务。 ```bash #!/usr/bin/expect -f set timeout 20 set user "your_username" set password "your_password" set host "remote_host" # 开始连接过程 spawn ssh "$user@$host" # 如果提示 yes/no 则表示首次访问该主机需确认指纹信息 expect { "(yes/no)" { send "yes\n"; exp_continue } } # 输入密码进行身份验证 expect "*assword:" { send "$password\n"} # 执行所需的操作,这里以列出家目录下的文件为例 expect "# " send "ls ~\n" # 结束会话 expect eof ``` 这段代码展示了怎样通过组合上述提到的关键字(`spawn`, `expect`, `send`)去建立安全通道、回应挑战请求(如初次连接时的安全警告),最后成功进入对方系统后发出命令获取想要的结果[^3]。 #### 应对多个命令的情况 当有多个命令需要连续发送给同一个 session 时,建议将它们合并成单个字符串再传递过去,而不是简单地堆叠多次调用 `send` 函数。这样做不仅提高了效率而且减少了潜在错误的发生几率。例如: ```bash send "command1 && command2 && command3\n" ``` 或者按照提供的另一种方式,在一行内串联起所有的命令序列[^2]: ```bash expect -c " spawn ssh $hosts2; send \"mv /home/mazu/app/bin/adb_app /home/mazu/app/bin/adb_app_bak || cp rule.json rule.json_bak\r\" ; expect eof " ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值