1. 程式人生 > >while迴圈重定向只能讀取第一行

while迴圈重定向只能讀取第一行

今天碰到一個ssh的問題,google之。原因如下:

需要讀取一個文字,次文字每一行包含一個IP在while迴圈中使用ssh,但ssh完第一行後就退出了,如何避免自動讀取一行就跳出while迴圈,此文將詳細解釋其原因。 
 
    最近在寫一個自動更新的shell,可是發現如果在使用while迴圈從一個檔案中讀取ip地址,然後訪問就只能讀取第一行紀錄。程式碼如下: 

1 while read LINE
2 do
3 echo *******************************************$LINE
4 ssh 192.168.10.233 
ls
5 done < data

但是如果使用for就沒有這個問題,非常的奇怪,for的程式碼如下: 
1 for LINE in `cat data`
2 do
3 echo *******************************************$LINE
4 ssh 192.168.10.233 ls
5 done

難道for和while竟然有這麼大的差別,不可能吧。經過一番試驗以後發現,原來並不是while的for的差別,而是while中使用重定向機制,data檔案中的資訊都已經讀入並重定向給了整個while語句。所以當我們在while迴圈中再一次呼叫read語句,就會讀取到下一條記錄。問題就出在這裡,ssh語句正好回讀取輸入中的所有東西,下面這個shell能很好的說明這個問題: 

1 while read LINE
2 do
3 echo *******************************************$LINE
4 ssh 192.168.10.233 cat
5 done < data

執行這個shell就會發現,ssh中的cat語句會打印出data檔案中的其他紀錄,這就導致呼叫玩ssh語句後,輸入快取中已經都被讀完了,當read語句再讀的時候當然也就讀不到紀錄,迴圈也就退出了。改進方法是,將ssh的輸入重定向輸入: 
1 while read LINE
2 do

相關推薦

while迴圈定向只能讀取一行

今天碰到一個ssh的問題,google之。原因如下: 需要讀取一個文字,次文字每一行包含一個IP在while迴圈中使用ssh,但ssh完第一行後就退出了,如何避免自動讀取一行就跳出while迴圈,此文將詳細解釋其原因。        最近在寫一個自動更新的shell,

Java 攔截器重定向無限迴圈/定向次數過多報錯 的解決方案

public class CheckPortInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, Http

Filter進行登入驗證時迴圈定向的解決方法

    Filter也稱之為過濾器,它是Servlet2.3以上新增加的一個功能,其技術是非常強大的。通過Filter技術可以對WEB伺服器的檔案進行攔截過濾,從而實現一些特殊的功能。在JSP開發應用中也是必備的技能之一。     Filter可以改變一個request(請

web專案中實現登陸成功後才能訪問某些頁面,否則自動跳轉到登陸介面,以及對無限迴圈定向的解決

1、不使用過濾器實現,在需要攔截的頁面通過session判斷是否登陸,若沒登陸則跳轉到login.jsp頁面: <% Admin admin = (Admin)session.ge

Shell中while迴圈的done 後接一個定向

讀檔案的方法: 第一步: 將檔案的內容通過管道(|)或重定向(<)的方式傳給while 第二步: while中呼叫read將檔案內容一行一行的讀出來,並付值給read後跟隨的變數。變數中就儲存了當前行中的內容。 例如讀取檔案/sites/linuxp

mysql 導入 csv文件中數據,只能導入一行

https 之間 提示 文件中 什麽 mysq 是否 workbench kdt 用workbench導入csv數據,只能導入數據的第一行,也就是標註每一列的列名的那一行。但問題是,每次導入完成時,系統提示已經導入了500條記錄(這個文件中的確有500條記錄),可是刷新數據

5周3次課 shell介紹 命令歷史 命令補全和別名 通配符 輸入輸出定向

linux中shell介紹 命令歷史 命令補全和別名 通配符 輸入輸出重定向1.shell介紹shell 是一個命令解釋器,提供用戶和機器之間的交互。它支持特定語法,邏輯判斷、循環。比如,我們登陸的終端,它其實就是一個 shell,供我們和機器交互。Linux 下面有很多 shell,每個用戶都可以有自

五章 linux定向和管道

控制 windows 空白 設備 example 替換 刪除fstab num 研究 重定向和管道 標準輸入和輸出: 程序:指令+數據 讀入數據:Input 輸出數據:Output 打開的文件都有一個fd: file descriptor (文件描述符) Linux給程序提

while中done接管道 定向讀文件

shell 重定向 管道while讀文件的方法:將文件的內容通過管道 | 或重定向 < 的方式傳給whilewhile中調用read將文件內容一行一行的讀出來,並賦值給read後的變量來逐行處理重定向的方式function read_file(){while read LINEdo echo $

java基礎十一篇 while迴圈和do...while迴圈

1、while 語法: while(判斷條件){ 迴圈操作 }; 執行過程: < 1 >、 判斷 while 後面的條件是否成立( true / false ) < 2 >、 當條件成立時,執行迴圈內的

4章:作為Servlet:請求和響應/4.5 定向和請求分派

重定向 在瀏覽器端進行重定向:可以是HTML,也可以是JSP 程式碼: package web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.S

易學筆記-Linux命令-7章:定向

第7章:重定向 重定向 概念:Linux中任何的一個東西都是檔案,輸入和輸出的基礎也都是檔案。而重定向指的是從輸入和輸出的標準檔案切換到一般檔案 標準化的輸入和輸出 標準的輸入:stdin:通常指的是鍵盤 標準的輸出:stdout:通

16講 struts2定向到action

重定向Action指,struts.xml中,在一個result結果直接跳轉到另外一個action中,資料不可以共享, 1在HeadFirstStruts2chapter02_07中,新建HelloAction2,name2屬性,get() set()方法,在預設的execute()方法中給 nam

C#程式設計基礎七課:C#中的基本迴圈語句:while迴圈、do-while迴圈、for迴圈、foreach迴圈的使用

知識點:while迴圈、do-while迴圈、forxufo迴圈、ach迴圈的使用。 1、while迴圈 特點:先判斷條件,條件為真,執行迴圈語句。條件為假,直接結束迴圈語句。 語法: while(條件表示式) {        迴圈語句;

shell指令碼學習四彈-管道與IO定向

shell指令碼學習第四彈-管道與IO重定向 一、IO介紹 什麼是IO?簡單的來說,IO就是輸入輸出;在unix裡面,我們必須要標準輸入,標準輸出和標準錯誤。我們可以用程式執行過程來更明顯說明:程式的輸入就是標準輸入,程式處理完之後,輸出結果就是標準輸出,或者報錯就是標準錯誤。

一個while迴圈

功能:猜測理想數字 程式碼如下: numb = 66 print("猜測一個我想的數字,你有五次機會") count = 1 input_numb = int(input("你猜什麼")) while count <= 5: if input_numb > numb:

四周)使用者輸入和while迴圈、函式

使用者輸入和while迴圈 7-1 汽車租賃 car = input("Let me see if I can find you a Subaru\n") print(car) 程式執行後顯示 Let me see if I can find you a Subaru輸入“intere

《Python程式設計:從入門到實踐》7章 使用者輸入和while迴圈

第7章 使用者輸入和while迴圈 7-1 汽車租賃 編寫一個程式,詢問使用者要租賃什麼樣的汽車,並列印一條訊息,如“Let me see if I can find you a Subaru”。

Python學習【3篇】:Python之運算子 python-----運算子及while迴圈

python-----運算子及while迴圈 一、運算子 計算機可以進行的運算有很多種,不只是加減乘除,它和我們人腦一樣,也可以做很多運算。 種類:算術運

java-讀取txt檔案中的一行URL並進行請求,得出響應

背景:其實我是拿來練手的。想寫程式碼而已,並沒有啥特殊的目地 我的需求: 有一個url.txt檔案,裡面裝的一行一行的URL 我要請求每一行URL,然後去請求,拿到第一個請求的響應結果,程式碼很簡單,網上一搜遍地都是,我加工了一下。 整合了 直接上碼吧! p