在Linux 编程中有时我们会用到shell脚本来帮我们做一些事情,但涉及到交互中需要人为交互的部分如果想自动化运行就比较麻烦,但shell操作中其实是考虑到这点的。下面我以一个例子来简要的说明,当然网上有很多相关的描述,只是信息较杂乱,不够直接明了。

#首先介绍一下用到的命令:expect

expect [选项] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ] 选项 -c:从命令行执行expect脚本,默认expect是交互地执行的   示例:expect -c 'expect "\n" {send "pressed enter\n"}' -d:输出调试信息   示例:expect  -d ssh.expexpect中的相关命令 spawn:启动新的进程 send:向进程发送字符串 expect:从进程接收字符串 interact:允许用户交互exp_continue  匹配多个字符串时在执行动作后加此命令 expect最常用的语法(tcl语言:模式-动作) 单一分支模式的语法: expect "hi" { send "You said hi\n" }           匹配到 hi 后,会输出"you said hi",并换行多分支模式的语法: expect "hi" { send "You said hi\n" } \ "hehe" { send “Hehe yourself\n" } \ "bye" { send "Goodbye\n" } 匹配 hi, hehe, bye 中的任意字符串时, 发送相应字符串。等同于:expect { "hi" { send "You said hi\n" } "hehe" { send "Hehe yourself\n" } "bye" { send "Goodbye\n" } } 

#expect安装:

根据你的系统不同,执行不同命令即可,简单这就不描述了。例如:yum -y install expect

OK,到这里是不是有点不耐烦了。。。接下来直接上一个例子,马上上手。。。。

#expect使用:

先来看一个场景:

此场景是需要使用 adduser 命令添加一个用户。期间需要用户交互的输入密码及确认密码的操作,这种在自动运行过程中认为不能干预,如果我们想系统自动化运行只能依靠脚本实现。

接下来看实现此功能的脚本

#!/usr/bin/expect
#创建用户命令:adduser ftp
#匹配password:字符串,然后输入123456\n  exp_continue 表示可以多次匹配就需要用到set timeout 30spawn adduser ftp
expect {"password:" { send "123456\n";exp_continue }
}spawn adduser nobody
expect {"password:" { send "123456\n";exp_continue }
}expect eof

这里用到了 #!/usr/bin/expect 解释;"password:" 就是我们期望匹配的字符。send 用于匹配期望后发送用户的输入,这里也就是我们的密码;是不是很简单。。。


创作不易,您的点赞+收藏是对我最大的支持

交互式shell脚本实操相关推荐

  1. shell脚本实操学习之函数、正则表达式

    shell脚本实操学习之函数.正则表达式 shell函数 函数介绍 函数语法 函数应用 正则表达式 正则表达式介绍 特殊字符 POSIX字符 shell函数 函数介绍 在写代码的时候,我们很多人习惯从 ...

  2. 详解Linux交互式shell脚本中创建对话框实例教程

    详解Linux交互式shell脚本中创建对话框实例教程 本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一 ...

  3. 创建交互式shell脚本对话框

    当你在终端环境下安装新的软件时,你可以经常看到信息对话框弹出,需要你的输入,比如:RHEL/CentOS自带的setup,对话框的类型有密码箱.检查表.菜单等等.他们可以引导你以一种直观的方式输入必要 ...

  4. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  5. QQ引流脚本,QQ扩列引流脚本实操演示

    大家好 自从社交平台异军突起,比如快手,QQ这样的知名平台 迅速的火遍全网,当然也衍生出很多喜欢短视频平台和热爱互联网的小伙伴 这里呢给大家简单的讲解一下什么是QQ扩列脚本,我也为此做了一个视频,让大 ...

  6. 抖音商家引流的正确方法,抖音商家引流脚本实操教程。

    大家好我是你们的小编一辞脚本,今天给大家分享新的知识,很开心可以在CSDN平台分享知识给大家,很多伙伴看不到代码我先录制一下视频 在给大家做代码,给大家分享一下抖音商家引流脚本的知识和视频演示   不 ...

  7. 2021-10-26 linux 交互式shell脚本对话框----whiptail指令

    一.编译Android kernel的时候弹出一个选择对话框,比较好奇,就认真分析了一下这个脚本对话框怎么来的. 1.编译的时候会调用mkimg文件. 2.mkimg文件里面会调用whiptail指令 ...

  8. 使用shell脚本实现在liunx上进行svn的上传下载更新功能

    最近有个功能,是需要从在liunx上拉取svn地址,并创建一个新文件进行提交,shell脚本如下 #!/bin/bash echo "Hello World !" myFile=& ...

  9. shell脚本如何实现goto_linux通过shell脚本实现对apache服务的监控

    假设有一个业务需求:每隔2分钟, 判断当前Apache服务是否启动,如果启动则不执行任何操作,如果没有启动则开启Apache服务. 1,启动apache 2, 查看apache进程 结论: 如果apa ...

最新文章

  1. 脚本化 tmux — LinuxTOY
  2. leetcode 441. 排列硬币(Java版)
  3. 贪心法——区间覆盖问题
  4. sublime text3常用的一些快捷键
  5. java replace stringbuilder_Java StringBuilder replace()方法
  6. linux设置环境变量 临时设置 和 永久设置
  7. 自定义iWatch App点击Glance后的跳转页
  8. C/C++[结构体]
  9. 3dmax中slice plane切割平面的作用
  10. ISCW实验11:使用SDM配置Site-to-Site IPSec ×××
  11. (71)--爬取拉勾网招聘信息
  12. UniPro、Bugzilla和Teambition 缺陷管理工具优劣势对比
  13. 【 Vue 】暗黑模式切换
  14. 新能源充电桩控制板迭代升级,打开充电桩行业发展新机遇
  15. elaticsear学习常见错误
  16. 苏大计算机考研 操作系统常见易错知识点整理
  17. Git之版本回退与前进
  18. python计算机器人运动学分析_V-rep学习笔记:机器人逆运动学数值解法(The Jacobian Transpose Method)...
  19. 广告公司网站该怎么做和运营
  20. 电脑软件没运行,内存爆满可以这样解决

热门文章

  1. 关于CSI的一条龙服务
  2. turtle库的一些基本函数
  3. 关于遥感图像解译的思考
  4. 科技云报道:成立11年,青云的变与不变
  5. 特斯拉降价也无法阻挡国内新能源汽车厂商前进的步伐
  6. MySQL提示Can‘t connect to MySQL server on localhost (10061)解决方法
  7. 【GTASA】如何解锁Locked的DFF模型
  8. 免费edu邮箱申请注册地址
  9. 华为云桌面--引领移动办公新潮流
  10. AW297 赤壁之战(数据结构优化DP)