shell脚本关于expect语言的使用

shell脚本关于expect语言的使用

首先感谢社区大佬们的贡献,以下几个链接很好,建议收藏

1、Shell脚本切换root用户或获取root权限 https://blog.youkuaiyun.com/qq_41057885/article/details/123380174

2、Linux 在shell脚本中切换到root并执行命令 https://www.codeleading.com/article/40314762786/

3、 Linux expect 介绍和用法一 https://www.cnblogs.com/saneri/p/10819348.html
linux expect介绍及用法 https://blog.youkuaiyun.com/qq_38125626/article/details/112506796

4、shell脚本实战-expect语言的使用 https://blog.youkuaiyun.com/xinshuzhan/article/details/108017217

5、关于spawn https://blog.youkuaiyun.com/weixin_33757911/article/details/93123614

6、 如何向expect脚本里面传递参数 https://blog.youkuaiyun.com/qq_26502245/article/details/117068576

7、Linux 查看系统现存所有用户命令 https://www.jaagool.com/article/1584162938803

1. 首先关于expect我的了解, expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。说白了,expect就是一套用来实现自动交互功能的软件。主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。

  • expect自动交互流程:
1、spawn启动指定进程;
2、expect获取指定关键字
3、send向指定程序发送指定字符
4、执行完成退出.

注意该脚本能够执行的前提是安装了expect

常用命令–

spawn               交互程序开始后面跟命令或者指定程序
expect              获取匹配信息匹配成功则执行expect后面的程序动作
send exp_send       用于发送指定的字符串信息
exp_continue        在expect中多次匹配就需要用到
send_user           用来打印输出 相当于shell中的echo
exit                退出expect脚本
eof                 expect执行结束 退出
set                 定义变量
puts                输出变量
set timeout         设置超时时间

2. 为什么要是用expect?

最近在做项目有个需求,一个非root用户需要修改linux系统的环境变量,比如时钟,date -s 以及hwclock -w 或clock -w这些指令都是不能直接执行的,最后才选择expect。

3、使用步骤

  • 3.1 先须安装expect
     yum install -y expect
    
  • 3.2 编写脚本( 我的脚本文件是 switchRoot.sh ,建议后缀是.exp)
#!/usr/bin/expect
## 只有先进入expect环境后才可执行spawn

## 不论是在此脚本内自动输入密码还是在脚本外手工输入密码,至少要等待1秒
set timeout 1

## 切换root用户
spawn su root

## 等待输入密码
expect "password for"

## 若有则立即返回,否则就等待一段时间后返回,等待时长就是开头设置的1秒
##expect "password:"

## 向上面的进程(su kevin)发送字符串中的密码, 并且自动敲Enter健(\r)

###接收变量
set pass [lindex $argv 0]

##输入变量
send "$pass\n"

set parm1 [lindex $argv 1]


## 进入目录
send "cd /home/cloud/\n"

## 执行目标文件
send "./Test.sh $parm1\n"

##退出expect
expect eof

  • 3.3 Test.sh脚本(注意切换非root用户,发现单独执行hwclock -w没有权限)
#!/bin/bash

##当前用户
whoami

## 打印传递的变量
echo "$1"

hwclock -w

echo "------------ end."
echo '0'

  • 3.4 执行脚本
./switchRoot.sh  'root用户密码'  '参数2'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值