`
you_laner
  • 浏览: 6044 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
最近访客 更多访客>>
hqx
社区版块
存档分类
最新评论

在while和for循环中使用ssh

阅读更多
    我在while循环中使用ssh,但ssh完第一行后就退出了,使用了exec, & 等命令均不行,后来看到这篇文章的解释,才明白。
 
    转载来自:http://blog.csdn.net/shrekmu/archive/2008/06/05/2513177.aspx,以示提醒备份。

    转载如下:
    最近在写一个自动更新的shell,可是发现如果在使用while循环从一个文件中读取ip地址,然后访问就只能读取第一行纪录。代码如下:
while read LINE
do
    echo *******************************************$LINE
    ssh 192.168.10.233 ls
done < data
  但是如果使用for就没有这个问题,非常的奇怪,for的代码如下:
for LINE in `cat data`
do
    echo *******************************************$LINE
    ssh 192.168.10.233 ls
done
  难道for和while竟然有这么大的差别,不可能吧。经过一番试验以后发现,原来并不是while的for的差别,而是while中使用重定向机制,data文件中的信息都已经读入并重定向给了整个while语句。所以当我们在while循环中再一次调用read语句,就会读取到下一条记录。问题就出在这里,ssh语句正好回读取输入中的所有东西,下面这个shell能很好的说明这个问题:
while read LINE
do
    echo *******************************************$LINE
    ssh 192.168.10.233 cat
done < data
执行这个shell就会发现,ssh中的cat语句会打印出data文件中的其他纪录,这就导致调用玩ssh语句后,输入缓存中已经都被读完了,当read语句再读的时候当然也就读不到纪录,循环也就退出了。改进方法是,将ssh的输入重定向输入:
while read LINE
do
    echo *******************************************$LINE
    ssh 192.168.10.233 ls < /dev/null
done <  data
  这样,在while语句中也能顺利的执行ssh语句了。linux的重定向还真复杂。
分享到:
评论
1 楼 daywbdb 2012-10-15  
谢谢,正是这个问题困扰了我很久,一直没有查找到解决方法,现在终于知道了。
补充一点,如果有管道的话应该放到管道输出之前添加/dev/null
比如:ssh 192.168.10.233 stat /home/test.sh </dev/null|grep -i Modify

相关推荐

    ssh脚本,ssh脚本,ssh脚本

    8. **控制流程**:`if`语句、`for`和`while`循环是SSH脚本中常用的控制流程结构,用于根据不同的条件或重复执行任务。 9. **远程文件操作**:使用`scp`和`sftp`命令可以在本地和远程主机之间安全地传输文件。例如,...

    Shell编程中while与for的区别及用法详解

    - **`for 变量 in "$@" 或 “$*”`**: 当在脚本中使用`$@`或`$*`时,`for`循环可以用来遍历传递给脚本的所有参数。`"$@"`在每个参数被引用时都会将其视为独立的单元,而`"$*"`则会将所有参数合并成一个字符串。 - **...

    liunx编写脚本(循环).pdf

    关于改变SSH服务状态,我们可以用简单的命令行指令实现,无需在脚本中使用循环: ```bash #!/bin/bash service sshd start # 启动SSH服务 service sshd stop # 停止SSH服务 service sshd restart # 重启SSH服务 ```...

    expect在windows下使用的

    4. **变量和控制结构**:Tcl提供了丰富的变量类型和控制结构,如条件语句(`if`)、循环(`for`、`while`)等,用于构建复杂的`Expect`脚本。 5. **错误处理**:`Expect`脚本可以包含错误处理部分,通过捕获异常或...

    Shell脚本之无限循环的两种方法

    for 实现: 代码如下: #!/bin/bash set i=0 set j=0 for((i=0;i&lt;10;)) ... echo “————-j is $j ——————-“ ...while实现: ... 您可能感兴趣的文章:Shell中的循环语句for、while、until实例讲解Shel

    Python for Astronomers

    - **导入库**:介绍如何在Python中使用外部库,如NumPy和Matplotlib等。 - **编写基本程序**: - **函数编写**:讲解如何定义和调用函数。 - **数组操作**: - **创建NumPy数组**:使用NumPy库创建数组。 - **...

    java学习笔记-html-ssh-js

    - **控制结构**:如if语句、switch语句、for循环、while循环和do-while循环,以及break和continue语句,控制程序的流程。 2. **面向对象编程** - **类与对象**:类是对象的模板,对象是类的实例。理解封装、继承...

    scp.zip批量远程传输文件

    scp命令可以结合循环结构(如for或while)来一次传输多个文件,而远程发送终端命令可能涉及到ssh命令的使用,通过ssh可以在远程主机上执行任意命令。 关于“线程解压”,这可能指的是在多线程环境下进行文件解压缩...

    javademo的使用

    1. **基础语句**:Java的基础语句包括变量声明、赋值语句、条件语句(if-else)、循环语句(for、while、do-while)以及开关语句(switch)。这些语句是程序逻辑的基础,用于实现不同条件下的代码执行路径。 2. **...

    demo的使用3

    基础练习可能包括变量声明、数据类型(如整型、浮点型、字符型和布尔型)、流程控制(如条件语句if-else和循环for、while)、方法定义和调用,以及类和对象的使用。 “一些基础的语句和数据的交互使用”涵盖了输入...

    linnux远程操作软件

    /bin/bash`作为脚本的解释器,`echo`打印输出,`read`读取用户输入,`if`和`else`实现条件判断,`for`和`while`进行循环操作。 8. 系统日志:`/var/log`目录下存放着各种系统日志,`less`或`grep`可以帮助查看和...

    大三下linux选修课实验(一二三四+选座)

    他们将学习到变量、条件语句(if-else)、循环(for、while)、函数以及如何执行外部命令等基础知识。 至于选做任务“Bing图片下载”,这可能是一个利用编程语言(如Python)和Linux命令行工具来实现自动下载Bing...

    Linux高级bash编程

    在Perl脚本中使用eval命令来强制变量替换 11-15. 使用set来改变脚本的位置参数 11-16. 重新分配位置参数 11-17. Unset一个变量 11-18. 使用export命令传递一个变量到一个内嵌awk的脚本中 11-19. 使用getopts命令来...

    java教学讲义(培训讲义)

    - 运算符与流程控制:了解各种运算符的使用,包括算术、比较和逻辑运算符,以及条件语句(if-else)和循环(for、while)。 - 方法与异常处理:学习如何定义和调用方法,以及异常处理机制。 - 集合框架:熟悉...

    Advanced Bash-Scripting Guide <>

    在Perl 脚本中使用eval 命令来强制变量替换 11-15. 使用set 来改变脚本的位置参数 11-16. 重新分配位置参数 11-17. Unset 一个变量 11-18. 使用export 命令传递一个变量到一个内嵌awk 的脚本中 11-19. 使用getopts ...

    实战LINUX+SHELL编程与服务器管_part3、4

    3. 流程控制:学习if语句、for循环、while循环和case语句,用于条件判断和迭代操作。 4. 函数:掌握如何定义和调用Shell函数,提高代码复用性。 5. 输入/输出重定向:理解标准输入、输出和错误输出,学会使用重定向...

    Python-python自动化运维技术与最佳实践书中示例及案例

    书中可能涵盖变量、数据类型、控制流(if语句、for循环、while循环)、函数、模块等基础知识。 2. **文件操作**:Python在处理文件和目录方面提供了丰富的API,如open()、os模块、shutil模块等,这些在自动化运维中...

    shell脚本教程1

    第六章讲解了循环控制语句,包括`if`(单分支和多分支条件判断)、`for`循环、`case`语句和`while`循环,这些都是编写复杂逻辑的必备知识。 最后,第七章提供了几个实战脚本示例,展示了如何利用Shell实现特定功能...

    Shell编程脚本例子集合

    - **自定义循环变量**:使用for循环遍历一个自定义的变量列表,如`1 2 3 4 5`。 - **显示小棍子**:利用循环和转义序列`echo -ne "\033[1D$j"`实现光标左移,并显示小棍子(|)表示进度。 ### 5. 文件操作 - **读取...

    经典面试题目

    2. **运算符与流程控制**:涵盖算术、比较、逻辑运算符,以及if语句、switch语句、for循环、while循环和do-while循环的使用。 3. **类与对象**:深入讲解类的定义、对象的创建与销毁,以及封装、继承和多态等面向...

Global site tag (gtag.js) - Google Analytics