while read line 用法詳細介紹

循環中的重定向

或許你應該在其他腳本中見過下面的這種寫法:

while read line

do

???????…

done < file

剛開始看到這種結構時,很難理解< file是如何與循環配合在一起工作的。因為循環內有很多條命令,而我們之前接觸的重定向都是為一條命令工作的。這里有一個原則,這個原則掌握好了,這個問題就很簡單了:

對循環重定向的輸入可適用于循環中的所有需要從標準輸入讀取數據的命令;

對循環重定向的輸出可適用于循環中的所有需要向標準輸出寫入數據的命令;

當在循環內部顯式地使用輸入或輸出重定向,內部重定向覆蓋外部重定向。

上面的while結構中,read命令是需要從標準輸入中讀取數據的。我們來詳細了解一下read命令的用法吧,這個命令是shell腳本中使用頻率最高的命令之一。

read

先來看一下read的命令語法:

read arg1 arg2 arg3 arg4 …

read是一個用來賦值的命令,它需要從標準輸入獲得值,然后把這些值按位置依次賦值給變量arg1、arg2、arg3、arg4…,輸入的時候以空格作為字段分隔符。

read的一個最大特性是可以在腳本中產生交互,因為它從標準輸入讀取數據。read之所以很常用,一是因為我們經常需要賦值,二是因為它可以交互,三是read能夠一次給多個變量賦值。

$ read host ip name

linux 10.0.0.1 licong

$ echo $host $ip $name

linux 10.0.0.1 licong

$

可以看到,linux、10.0.0.1、licong分別被賦值給了變量host、ip和name。再看:

$ read host ip

linux 10.0.0.1 licong

$ echo $host

linux

$ echo $ip

10.0.0.1 licong

$

當我們輸入的字段比變量數目多時,最后一個變量的值將不只一個字段,而是所有剩余的內容;當輸入字段比變量數少時,多余的變量將是空值,你可以自己試試。現在我們再來看

while read line

do

???????…

done < file

read通過輸入重定向,把file的第一行所有的內容賦值給變量line,循環體內的命令一般包含對變量line的處理;然后循環處理file的第二行、第三行。。。一直到file的最后一行。還記得while根據其后的命令退出狀態來判斷是否執行循環體嗎?是的,read命令也有退出狀態,當它從文件file中讀到內容時,退出狀態為0,循環繼續驚醒;當read從文件中讀完最后一行后,下次便沒有內容可讀了,此時read的退出狀態為非0,所以循環才會退出。

另一種也很常見的用法:

command | while read line

do

????…

done

如果你還記得管道的用法,這個結構應該不難理解吧。command命令的輸出作為read循環的輸入,這種結構常用于處理超過一行的輸出,當然awk也很擅長做這種事。



本文轉自 wangergui 51CTO博客,原文鏈接:http://blog.51cto.com/wangergui/1846019,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256156.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256156.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256156.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++總結筆記(三)—— 結構體

一、概念 結構體是一種可以自定義數據類型的類型格式&#xff0c;一般用struct關鍵字進行定義。 //創建食物的結構體 struct Food {//屬性名string name; //名字int Price; //價格 };結構體有三種定義變量的方法。 1.1 定義結構體后再聲明變量&#xff0c;然后在對變量的…

[輕微]WEB服務器啟用了OPTIONS方法/如何禁止DELETE,PUT,OPTIONS等協議訪問應用程序/tomcat下禁用不安全的http方法...

使用了360網站安全檢測 查到有OPTIONS方法 百度了下 https://my.oschina.net/maliang0130/blog/338725 找到這個方法奈何http.conf 找不到無論在tomcat目錄里還是linux路徑下的/usr/etc或者apache2 最后通過開源中國找到 第一步&#xff1a;修改應用程序的web.xml文件的協議 &l…

MVC 事物同時保存,更新數據庫

本人小白一枚&#xff0c;第一次寫博&#xff0c;主要用作筆記&#xff0c;怕以后忘記了&#xff0c;大神尙可路過&#xff0c;也可多多指教 事物用在同時保存更新數據時&#xff0c;及只要在事物塊的范圍內&#xff0c;有一個操作出錯則事物塊所有更新&#xff0c;保存等操作都…

【圖像處理】——正裝照換底色Python

import cv2 import numpy as np # 讀取照片 img=cv2.imread("personalPic.jpg")# 圖像縮放 img = cv2.resize(img,None,fx=0.3,fy=0.3) rows,cols,channels = img.shape print(rows,cols,channels)# img_medianBlur=cv2.medianBlur(img,3) # 中值濾波,必須是大于1的奇…

Halcon例程詳解(植物測量) —— measure_plant.hdev

文章目錄 前言一、過程1.1 篩選ROI區域1.2 分割1.3 三維建模與仿射變換1.4 確定葉子的角度分布和高度1.5 確定葉子的面積和樹干的直徑1.6 對葉子的角度進行分析二、例程詳解2.1 篩選ROI區域2.2 分割2.3 三維建模與仿射變換2.4 確定葉子的角度和高度2.5 確定葉子的面積和樹干的直…

keil5中文亂碼的解決

keil5 復制出來的中文顯示亂碼&#xff0c;該如何解決&#xff1f; 點擊Edit - Configuration &#xff0c;進入編輯器設置&#xff1a; 點擊ok &#xff0c;就可以了轉載于:https://www.cnblogs.com/alan666/p/8312100.html

spark RDD iterator中sparkEnv功能 -- (視頻筆記)

sparkEnv是spark環境變量 1、可以從其中get 緩存 2、為master workder driver 管理和保存運行時對象。 3、excutorid &#xff0c;excutor 一種為driver類型&#xff0c;一種具體處理task 內部有線程池的excutor 4、actorSystem &#xff0c;如果運行在driver 則為spark driver…

【圖像處理】——Python實現幾何變換(自定義+opencv庫)

理論知識:參考https://blog.csdn.net/on2way/article/details/40460675 Python調用opencv函數參考:https://blog.csdn.net/on2way/article/details/46801063 一、引自《數字圖像處理》的基礎知識匯總 這個很重要!!!這里需要注意的是反向映射和前向映射的區別,反…

Go語言學習資料整理

整理網上找到的Golang語言學習資料基礎基礎教程 書籍在線版Go 指南-A Tour of GoGo語言圣經&#xff08;中文版&#xff09;Effective Go中文版Go Web編程 build-web-application-with-golangGo入門指南 The Way to Go《The Way to Go》中文譯本&#xff0c;中文正式名《Go入門…

C++總結筆記(四)—— 堆棧區域劃分與引用實例解析

文章目錄前言&#x1f600;一、概念1.1. 內存分區1.1.1 堆區1.1.2 棧區1.1.3 程序代碼區1.1.4 全局/靜態存儲區1.1.5 常量存儲區1.2. 引用二、程序示例總結前言&#x1f600; 在C的內存管理中&#xff0c;堆區和棧區是一個非常重要的概念&#xff0c;理解堆棧的相關知識&#…

學習Android MediaPlayer

Android Media Playback 原文 The Android multimedia framework includes support for playing variety of common media types, so that you can easily integrate audio, video and images into your applications. You can play audio or video from media files stored in…

spark2.0.1 安裝配置

1. 官網下載 wget http://d3kbcqa49mib13.cloudfront.net/spark-2.0.1-bin-hadoop2.7.tgz 2. 解壓 tar -zxvf spark-2.0.1-bin-hadoop2.7.tgz ln -s spark-2.0.1-bin-hadoop2.7 spark2 3. 環境變量 vi /etc/profile #Spark 2.0.1export SPARK_HOME/usr/local/spark2export PATH…

Spring Cloud各組件超時

Ribbon的超時 全局設置&#xff1a; ribbon:ReadTimeout: 60000ConnectTimeout: 60000局部設置&#xff1a; service-id:ribbon:ReadTimeout: 1000ConnectTimeout: 1000其中&#xff0c;service-id 是Ribbon所使用的虛擬主機名&#xff0c;一般和Eureka Server上注冊的服務名稱…

【圖像處理】——遍歷圖像所有像素的方法(for 循環和np.where遍歷)應用在模板制作

目錄 具體np.where的用法可以參見: 其他遍歷圖像的所有像素的方法: 模板制作流程 Python代碼

C++總結筆記(五)——構造函數和析構函數

文章目錄前言一、基本概念1 構造函數2 析構函數二、示例1. 構造函數和析構函數的簡單使用2. 拷貝構造函數的調用3. 淺拷貝和深拷貝前言 本文講述了構造函數和析構函數的概念以及對應的示例&#xff0c;以便加深理解。 一、基本概念 1 構造函數 構造函數用于初始化類的對象&a…

LINUX 更新

sudo apt-get dist-upgrade,更新所有的軟件轉載于:https://www.cnblogs.com/jackieron/p/5997805.html

python實戰===如何優雅的打飛機

這是一個打飛機的游戲&#xff0c;結構如下&#xff1a; 其中images中包含的素材為 命名為alien.png 命名為ship.png 游戲效果運行是這樣的&#xff1a; 敵軍&#xff0c;也就是體型稍微大點的&#xff0c;在上方左右移動&#xff0c;并且有規律向下移動。我軍目標&#xff0c;…

【圖像處理】——上采樣、下采樣、在模板匹配中的金字塔加速策略

目錄 1、下采樣 Python自帶函數 自定義函數 Python實現下采樣 2、上采樣 Python自帶函數 自定義函數<

C++總結筆記(六)——友元

文章目錄前言一、基本概念二、程序示例1.全局函數調用私有成員2. 外部類調用私有成員3. 外部類的成員函數調用私有成員總結前言 一、基本概念 友元是C中為了方便類外的類或者函數訪問類內私有成員而定義的一種特殊語法&#xff0c;用friend關鍵字進行修飾。 二、程序示例 友…

Java默認類型,類型轉換,常量與變量筆記

默認類型&#xff1a; 在java里整數默認是int類型&#xff0c;小數默認是double類型&#xff0c;單個字符默認是char類型&#xff0c;true、false自然默認的是boolean類型&#xff0c;字符串默認的是String類型。 變量和常量類型轉換&#xff1a; 因為有默認類型&#xff0c;在…