你了解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 << EOF 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自动交互。

转载于:https://www.cnblogs.com/qq78292959/archive/2011/07/29/2121221.html

教会你Linux Shell自动交互的三种方法相关推荐

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

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

  2. linux配置yum源的三种方法:

    linux配置yum源的三种方法: 1.配置网络yum源 2.通过上传镜像文件配置本地yum源 3.通过连接存储或本地镜像文件配置本地yum源(虚拟机) 配置各种yum源的时候,需要提前知道自己的li ...

  3. js中当等于最小值是让代码不执行_网页中JS函数自动执行常用三种方法

    本文为大家分享了在网页中JS函数自动执行常用方法,供大家参考,具体内容如下 一.JS方法 1.最简单的调用方式,直接写到html的body标签里面: 2.在JS语句调用: function myfun ...

  4. Linux清空文件内容的三种方法

    Linux清空文件内容的三种方法 测试文件:a.txt 第一种: $> a.txt 第二种: $echo "" > a.txt 第三种: $cat /dev/null ...

  5. Java程序初始化启动自动执行的三种方法

    目录 @PostConstruct注解 CommandLineRunner接口 ApplicationRunner 接口 @Order注解设置启动顺序 分享一下自己用过的java程序初始化启动自动执行 ...

  6. html网页自动运行函数,在网页中JS函数自动执行常用三种方法

    在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: functionn MyAutoRun() { //以下是您的函数的代码,请自行修改先! alert("函数 ...

  7. html手机不能自动播放音乐,解决移动端浏览器 HTML 音频不能自动播放的三种方法...

    由于Android,IOS移动端的浏览器以及微信自带的浏览器为了用户更好的体验,规定不自动播放音频视频,默认屏蔽了autoplay,如果要想达到自动播放效果,需要单独处理,方法有以下几种: 第一种:添 ...

  8. linux查看磁盘挂载的三种方法

    今天要讲的是linux下怎么查看磁盘的挂载,包括挂载点和挂载的硬盘或逻辑卷. 第一种方法:使用df命令,这个命令比较常用,大家都很熟悉.问题是这种方法,有时候挂载点和挂载的卷不在同一行,使用脚本分析需 ...

  9. 解决移动端浏览器 HTML 音频不能自动播放的三种方法

    由于Android,IOS移动端的浏览器以及微信自带的浏览器为了用户更好的体验,规定不自动播放音频视频,默认屏蔽了autoplay,如果要想达到自动播放效果,需要单独处理,方法有以下几种: 第一种:添 ...

最新文章

  1. python数据分析第七章实训3_《利用python进行数据分析》读书笔记--第七章 数据规整化:清理、转换、合并、重塑(二)...
  2. AB1601中断的问题
  3. 【问链-Eos公开课】第四课 EOS 的钱包创建、导入私钥
  4. happens-before
  5. HTTP协议中返回代码302的情况
  6. 数据结构与算法——递归、回溯与分治
  7. 第二周linux微职位
  8. SpringCloud config 配置中心介绍与基本配置使用
  9. Java-ReentrantLock-NonfairSync/FairSync
  10. js系列之每天一练成长录之一
  11. UnionID与OpenID的区别【转自微信官方文档】
  12. 用makedown写一份简约大方的简历
  13. 那个程序员的 Linux 常用软件清单 | Linux 工具篇
  14. PHP如何接入短信接口,通过短信群发通知
  15. 蓝桥杯训练系统 分解质因数
  16. wordcloud----canvas 绘制标签云/词云web版wordle(一)
  17. 深信服2019届校园招聘专场(私聊博主得内推码,免简历筛选)
  18. 关于Apple ID相关设置
  19. 水善利万物而不争,处众人之所恶,故几于道
  20. xSS-Reflected

热门文章

  1. [kubernetes] 解决k8s.gcr.io Image 导入导出 等问题
  2. memset()函数用法
  3. Spring boot 系列 入门--配置
  4. 基于kb的问答系统_1KB以下基于表的Q学习
  5. 用户空间使用内核头文件
  6. 将 ext_net 连接到 router - 每天5分钟玩转 OpenStack(145)
  7. MATLAB快速拟合二组数据
  8. 密度图的密度估计_箱形图、小提琴图、直方图……统统可以卡通化!
  9. 打开另外一个页面_如何在PDF页面中插入图片?
  10. c语言调用go函数,C中调用go中的回调函数