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

但是有时候我们可能会需要实现和交互程序如ftp,telnet服务器等进行交互的功能,这时候我们需要用到shell的自动交互功能.

最简单的例子就是创建用户,我创建100个用户,初始密码为123,那么要是挨着passwd username ,交互性输入密码,那不得疯掉,但是脚本里应该怎么写呢?将密码123,输入到passwd命令?

本文收集了较常用交互方法,并进行了比较和总结。

自动交互方法一:利用命令的自带参数,将标准输入作为手动输入的内容

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

重定向操作符command <

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

[yjwan@test ~]$ ftp -i -n 192.168.21.46 <

user dbftp dbftp101

ls

EOF

下面是得到的结果:

Connected to 192.168.21.46.

220 developerjail FTP server (Version 6.00LS) ready.

331 Password required for dbftp.

230 User dbftp logged in.

Remote system type is UNIX.

Using binary mode to transfer files.

229 Entering Extended Passive Mode (|||54281|)

150 Opening ASCII mode data connection for '/bin/ls'.

total 8847424

-rw-r--r-- 1 dbftp www 9055318991 Aug 28 14:28 ewiz90.sql_2010-08-29

226 Transfer complete.

221 Goodbye.

测试可以发现,如上代码使用帐号名dbftp,密码dbftp101成功登陆了ftp服务器,并进入目录,ls出当前目录的文件。

注意事项:

1 这里一定要加-i ,否则必定失败!!

这里ftp用的-I 参数 结束了交互式输入,因此可以用文本的方式自动地输入用户密码以及操作方式

如果不用-I 参数,那么必定要求你手动输入密码的!!那么就达不到自动登陆的要求了

你可以man ftp找到这个参数

-i 关闭多文件传送中的交互式提示。请参考 prompt、mget、mput 和 mdelete 子命令,以取得多文件传送中的提示的描述。

-n 防止在起始连接中的自动登录。否则, ftp 命令会搜索 $HOME/.netrc 登录项,该登录项描述了远程主机的登录和初始化过程。请参考 user 子命令。

2 举一反三:只要是要求输入密码的命令,一般都带有一个参数,允许你从标准输入,输入用户密码,以及操作。

其他常用的自动登陆命令的参数

1) Passwd命令

Linux下 Passwd有参数

--stdin

This option is used to indicate that passwd should read the new password from standard input, which can be apipe.

所以linux下自动改变用户密码的办法就是

Echo 密码 |passwd –stdin 用户名

Freebsd没有以上参数 注意

他的方法是echo passwd |pw mod user username -h 0

2)smbpasswd

-s

This option causes smbpasswd to be silent (i.e. not issue prompts)

and to read its old and new passwords from standard input, rather

than from /dev/tty (like the passwd(1) program does). This option

is to aid people writing scripts to drive smbpasswd

3)sudo

在shell脚本中需要用root用的来执行指令:

sudo 自动输入密码

echo "password" | sudo -S netstat -tlnp

-S

The -S (stdin) option causes sudo to read the password from the standard input instead of the terminal device.

3 标准输入还可以用以下两种写法:

可以将下面的内容写入到一个文本

然后ftp -I –n ip

或者echo “..” |ftp –I –n ip

都是可以的!

因为他们都满足“有一个标准的输入”这个条件

4ssh的自动登陆没有这样的自动输入密码的参数

一般都是使用公钥/私钥的方式自动登录

这种文章满街都是,网上google一下ssh自动登陆就可以找到答案。

或者用下面的办法。

自动交互方法2:利用expect脚本自动登陆

这个 expect基本属于一种编程了

基本任何需要交互式登陆的场合,他都可以解决,是相当的牛逼。

只要是第一种办法解决不了的,基本都可以用这种办法。

这里不介绍。因为另写了一遍关于expect 的。

linux脚本 程序输入,[转]Linux中shell脚本如何自动输入…相关推荐

  1. Linux中Shell脚本编程

    一.shell定义与执行 shell既是一种应用程序,又是一种程序设计语言 shell是用户和Linux内核之间的接口程序 >作为应用程序: 交互式地解释.执行用户输入的命令,将用 户的操作翻译 ...

  2. Linux下eclipse中shell脚本编程环境的搭建

    注意:本文所用到的linux发行版是fedora 15.如果用fedora 15以上的版本可能会有问题.至于解决方案或者是搭建方法我会尽量抽出时间写一篇新的博客... 本文主要是介绍在linux平台下 ...

  3. Linux中 shell 脚本获取当前工作目录的方法

    Linux中 shell 脚本获取当前工作目录的方法 1. 示例 2. 注意: 参考: 1. 示例 test.sh target_dir=$(cd $(dirname $0); pwd) echo $ ...

  4. linux存放脚本目录,linux中Shell脚本所在目录的绝对路径linux操作系统 -电脑资料...

    linux shell 脚本里面如果想得到当前脚本文件存放的绝对路径,也没有太现成的命令可以调用,不过可以通过下面的语句来获取:代码如下复制代码 baseDirForScriptSelf=$(cd & ...

  5. Linux中srch出现bash,ultraedit中shell脚本语法着色

    ultraedit中shell脚本语法着色 点击菜单"高级"-"配置",打开配置对话框.在导航一栏,点击"编辑器显示"----"语 ...

  6. linux脚本调用db2存储过程,LINUX定时执行含有DB2存储过程的SHELL脚本

    <LINUX定时执行含有DB2存储过程的SHELL脚本>由会员分享,可在线阅读,更多相关<LINUX定时执行含有DB2存储过程的SHELL脚本(6页珍藏版)>请在人人文库网上搜 ...

  7. linux脚本查看系统内存,二个linux下查看内存使用情况的shell脚本()

    摘要 腾兴网为您分享:二个linux下查看内存使用情况的shell脚本(),政务易,悦作业,优化大师,王者荣耀等软件知识,以及单向历app,优路教育app,kimoji,开关电源设计软件,皮皮高清影视 ...

  8. linux shc shell脚本_使用shc工具加密shell脚本详解

    Shc可以用来对shell脚本进行加密,可以将shell脚本转换为一个可执行的二进制文件.经过shc对shell脚本进行加密后,会同时生成两种个新的文件,一个是加密后的可执行的二进制文件(文件名以.x ...

  9. java 调用casperjs_Java程序去调用并执行shell脚本及问题总结(推荐)

    摘要: 该文章来自阿里巴巴技术协会(ATA)精选集 背景 我们在开发过程中,大部分是java开发, 而在文本处理过程中,主要就是脚本进行开发. java开发的特点就是我们可以很早地进行TDDL, ME ...

  10. SHELL/SSH基础知识(入门篇)-包含 shell 脚本语言的基本用法、 shell 脚本语言的基本用法、流程控制、函数 function、其它脚本相关工具、数组 array(欢迎留言交流)

    目录 1 shell 脚本语言的基本用法 1.1 shell 脚本注释规范 1.1.1 shell 脚本注释规范 1.1.2 执行(5种) 1.1.3 在远程主机运行本地脚本 1.1.4 检查shel ...

最新文章

  1. css3绘制环形_HTML5 + CSS3 gt;gt;gt; 015
  2. spring_Spring MVC控制器的单元测试:REST API
  3. [BZOJ 4034][HAOI2015]树上操作(欧拉序列+线段树)
  4. 《系统集成项目管理工程师》必背100个知识点-05PMO的主要职能
  5. 《Linux内核设计与实现》读书笔记(二)- 内核开发的准备
  6. python中汉字与变量不可同时出现_Python语言应用培训课(选择练习)
  7. 深入理解JAVA中的注解
  8. Android 驱动(10)----设备树(二)linux内核顶层am335x-evm.dts
  9. 已为此响应调用getwriter()_远程过程调用(RPC)
  10. Python爬取安居客租房数据,设置排除自己条件以外的数据
  11. 使用opencv实现简单的人脸识别
  12. HFSS - 圆形双馈微带天线
  13. bt 与 ed2k 区别
  14. echart 三维可视化地图_在 ECharts GL 中绘制三维地图
  15. C/C++编程:#pragma once用法总结
  16. Linux电脑怎么接入arm开发板,PC机与ARM开发板之间实现NFS共享
  17. 桌面快捷方式小箭头隐藏与还原(亲测有效)
  18. Java学习--多线程案例--模拟火车票销售(线程安全问题)
  19. 北京近期校园招聘java_JAVA研发工程师-校招,北京
  20. 2015年ACM长春区域赛比赛感悟

热门文章

  1. FFT与多项式、生成函数题目泛做
  2. 关于cocos2d-x 和安卓之间的相互调用
  3. 使用navicat工具创建MySQL存储过程
  4. Android---Android 屏幕尺寸与密度
  5. postfix 554-5.7.0 Reject
  6. 我的2009:心智成长篇
  7. 推荐一个ASP的内容管理框架(ASP Nuke)
  8. 十一Python之路,Day6 - 面向对象学习
  9. 当谈论设备指纹时,我们到底在说什么?(转)
  10. Spring Boot如何初始化数据