你了解Linux系统么?你是Linux系统的应用者么?如果你要学习linux,你可能会遇到Linux Shell自动交互问题,这里将介绍Linux Shell自动交互的解决方法,在这里拿出来和大家分享一下。

一、背景

shell脚本在处理自动循环或大的任务方面可节省大量的时间,通过创建一个处理任务的命令清单,使用变量、条件、算术和循环等方法快速创建脚本以完成相应工作,这比在命令行下一个个敲入命令要省时省力得多。

但是有时候我们可能会需要实现和交互程序如ftp,telnet服务器等进行交互的功能,这时候我们需要用到shell的自动交互功能,本文收集了较常用的三种自动交互方法,并进行了比较和总结。

二、需求

需求1:

从一台Linux机器ftp登陆到另一台Linux机器,进行系列操作后关闭,懒得每次都手动输入密码。

需求2:

改变登录用户密码,懒得每次都输入新旧密码。

需求3:

希望su自动登录到root账户,懒得每次都输入root密码。

三、调试环境

终端:SecureCRT

系统:WinXP, CentOS 4.4(VmWare)

Shell:bash

注:shell有很多种,B类SHELL(sh, bash, ksh)之间行为相近;C类SHELL(csh, tcsh)之间行为相近,还有zsh和rc等shell,本文的调试环境是bash。

四、自动交互方法一

自动交互最关键的就是交互信息的自动输入,首先联想到文件重定向,在shell编程中有这样一种用法(参考Linux与UNIX SHELL编程指南 chapt 5.7):"command << delimiter  从标准输入中读入,直至遇到delimiter分界符。"

重定向操作符command << delimiter是一种非常有用的命令,shell将分界符delimiter之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符, shell就知道输入结束了。最常见的delimiter分界符是EOF,当然完全可以自定为其他字符。

对于需求1 要求的自动登陆ftp,并作系列操作,则可以用这种方法进行自动交互。代码如下:#!/bin/bash

ftp -i -n 192.168.167.187 <

user hzc 123456

pwd

cd test

pwd

close

bye

EOF

测试可以发现,如上代码使用帐号名hzc,密码123456成功登陆了ftp服务器,并进入目录,打印出了pwd。

五、自动交互方法二

需求2中要求采用非交互的方式改变登录用户密码,尝试用方法1,无法实现。

这时候联想到交互信息的另一个自动输入方法,管道,通过echo + sleep + | 可以实现这个需求。#!/bin/bash

(echo "curpassword"

sleep 1

echo "newpassword"

sleep 1

echo "newpassword")|passwd

测试通过,运行这个脚本,直接把当前用户的curpassword改成newpassword。

六、自动交互方法三

需求3中要求自动登录root账号,尝试方法1和方法2,都出现错误提示standard in must be a tty。

这时候尝试寻找外部帮助,一个shell工具expect可以实现这个功能,其实expect就是一个专门用来实现自动交互功能的工具,expect的语法可以参考相关资料,代码如下:#!/usr/bin/expect

spawn su root

expect "password: "

send "123456\r"

expect eof

exit

测试通过,运行这个脚本,直接从当前用户登录到root用户。

七、方法总结

方法一(重定向)简单直观,也经常有实际应用,但是在自动交互领域功能有限。

方法二(管道)也很简单直观,有时甚至不用sleep配合就能展现强大的自动交互实力,但是在某些时候也束手无策。

方法三(expect)在功能上是最为强大的,expect本来就是为实现自动交互功能而生,但是缺点是需要安装expect包,在嵌入式等环境下难以安装。

三个方法各有优劣,应用的好,都可以完成Linux Shell自动交互。

linux自动点击软件上的按钮有什么用,教会你Linux Shell自动交互的三种方法相关推荐

  1. linux自动点击软件上的按钮,如何在Gnome Shell上自动启动程序

    原标题:如何在Gnome Shell上自动启动程序 登录Gnome Shell时自动打开应用程序是提前设置工作区的好方法.在Gnome Shell上自动启动程序的最简单方法是使用Tweaks应用程序. ...

  2. 教会你Linux Shell自动交互的三种方法

    你了解Linux系统么?你是Linux系统的应用者么?如果你要学习linux,你可能会遇到Linux Shell自动交互问题,这里将介绍Linux Shell自动交互的解决方法,在这里拿出来和大家分享 ...

  3. 安卓软件改名器_自动点击屏幕的软件有哪些?-手机自动点击软件下载

    闪电自动点击 系统工具 | 4.21 MB | 平台:安卓 更新时间:2020-11-09 下载 闪电自动点击app是一款能够帮助你自动操作重复性机械化的操作的软件,比如在游戏中你需要一直点击屏幕进行 ...

  4. 点击页面上的按钮后更新TextView的内容,谈谈你的理解?(阿里面试题 参照Alvin笔记 Handler源码解析)

    阿里面试题: 点击页面上的按钮后更新TextView的内容,谈谈你的理解? 首先,这个一个线程间通信的问题,可以从Handler的角度进行解释,可以从五个角度分析这个问题: 1.需要在主线程更新UI, ...

  5. selenium学习笔记(4)——自动点击美团上面的美食中的代金券

    想要系统学习python selenium自动化测试,请关注我的专栏: https://blog.csdn.net/column/details/29112.html 自动点击美团上面的美食中的代金券 ...

  6. centos 卸载软件_一篇看懂!详解-Linux系统中安装软件的三种方法

    Linux系统中安装软件的三种方法 注:本文主要以CentOS为例介绍常用的安装方式,其他版本linux在文章底部 Linux系统中怎么安装软件,首先说一下应用程序与系统命令的区别: 1.文件位置 系 ...

  7. linux怎么断网怎么使用yum_电脑突然断网,连接不上网络怎么办?三种方法轻松找回...

    很多朋友在用电脑的时候,经常会出现断网的现象,网络无法连接或者连不上,不管再怎么尝试,就是没有效果,那么接下来小编来教大家三种方法,解决无法连接网络的问题. 一.启动WLAN AutoConfig服务 ...

  8. linux终端下载notepad,在Linux系统上安装NotePad++的三种方法介绍

    本文介绍在Linux操作系统上安装NotePad++的三种方法,使用Snap.Wine和NotePadQQ.这里要说的是:由于像Wine和Snap软件包这样的工具,在Linux上运行的Notepad+ ...

  9. 平板 刷 linux系统,在Linux系统上安装NotePad++的三种方法介绍

    本文介绍在Linux操作系统上安装NotePad++的三种方法,使用Snap.Wine和NotePadQQ.这里要说的是:由于像Wine和Snap软件包这样的工具,在Linux上运行的Notepad+ ...

最新文章

  1. python安装Pyro报错:SyntaxError: Missing parentheses in call to ‘exec‘
  2. 豆瓣FLASHMP3播放器
  3. 内存对齐的规则以及作用
  4. 《实施Cisco统一通信VoIP和QoS(CVOICE)学习指南(第4版)》一导读
  5. 第二十八讲 解非齐次线性方程组
  6. STVD下配置Cosmic编译器
  7. [Linux实用工具]Ubuntu环境下SSH的安装及使用
  8. 香农定理和奈奎斯特定理区别_「中考复习」三大变换之旋转(旋转的构造-托勒密定理)...
  9. Linux常用命令总结之(五)alias
  10. git设置master权限_git怎么控制成员的权限?
  11. 转行进入测试一年有感
  12. 公司不能把笔记导出去真操蛋
  13. 人脸识别门禁系统java实现_java实现人脸识别源码【含测试效果图】——前台显示层(index.jsp)...
  14. 对象转换 json 字符串和 json转换对象的几种方式
  15. STM8使用STVD开发环境问题
  16. 【任务二】打卡——by 003-Vamein
  17. 《分布式消息中间件实践》 读书笔记
  18. Python Statsmodels 统计包之 OLS 回归
  19. linux如何安装vmtools工具
  20. Linux 系统的使用

热门文章

  1. python机器学习库sklearn——特征选择
  2. python机器学习案例系列教程——模型评估总结
  3. 安卓服务service全解,生命周期,前台服务、后台服务,启动注销、绑定解绑,注册
  4. 利用vscode插件C51生成C51的hex文件
  5. JS 监听绑定和取消事件
  6. 接口的隐式和显式实现
  7. 【BZOJ-1502】月下柠檬树 计算几何 + 自适应Simpson积分
  8. php访问方法外变量
  9. Python写入文件,但是发现文件为空,竟然未写入!
  10. 最强JAVA核心技术群