1. 程式人生 > >第五章:shell呈現資料&重定向

第五章:shell呈現資料&重定向

 呈現資料
  • 顯示指令碼輸出的方法:
  • 在顯示器螢幕上顯示輸出
  • 將輸出重定向到檔案中
標準檔案描述符:   linux用檔案描述符來標識每個檔案物件。檔案描述符是一個非負整數,可以唯一的標識會話中開啟的檔案。每一個過程一次最多可以有9個檔案   描述符。處於特殊目的,shell保留了最早的3個檔案描述符(0 1 2 ) 檔案描述符     縮寫   0            stdin   1            stdout   2            stderr 1.stdin   stdin 檔案描述符代表shell的標準輸入。對終端介面來說,標準輸入是鍵盤shell 從STDIN 檔案描述符對應的鍵盤獲得輸入,在使用者輸入時處理每個字元。
 在使用輸入重定向符號< 時,linux會用重定向指定的檔案來替換標準輸入檔案描述符。它會讀取檔案並提取資料,就如同他是鍵盤上鍵入的。  許多bash命令能接受STDIN的輸入,尤其是沒有在命令列上指定檔案的話。 下面是用cat 處理STDIN輸入的資料的例子: [[email protected] ~]# cat test this is a apple this is a book go for a walk [[email protected] ~]# cat < test this is a apple this is a book go for a walk
現在cat命令會用test檔案中的行作為輸入。你可以使用這種技術來向任何能從STDIN接受資料的shell命令輸入資料 STDOUT   STDOUT檔案描述符代表標準的shell輸出,在終端介面行,標準輸出就是終端顯示器。預設的情況,很多bash命令會定向輸出到STDOUT檔案描述符。 [[email protected] ~]# ls -l > bb [[email protected] ~]# cat bb total 304856 -rw-r--r--  1 root root         2 Jul  1 11:42 ? -rw-------. 1 root root      1356 Oct  9  2015 anaconda-ks.cfg
-rw-r--r--  1 root root       173 Jul  1 15:25 badtest -rw-r--r--  1 root root         0 Jul 12 16:46 bb drwxr-xr-x. 2 root root      4096 Jul  6 14:14 Desktop drwxr-xr-x. 2 root root      4096 Oct  9  2015 Documents drwxr-xr-x. 2 root root      4096 Oct  9  2015 Downloads -rwxr-xr-x. 1 root root       941 Oct 12  2015 eth0.sh -rw-r--r--  1 root root        63 Jul  1 11:28 if.s -rw-r--r--  1 root root      1937 Jul  6 15:52 installmysql -rw-r--r--  1 root root        32 Jul  1 17:12 logfile -rw-r--r--  1 root root       144 Jul 11 11:15 log.log drwxr-xr-x. 2 root root      4096 Oct  9  2015 Music -rw-r--r--  1 root root 311771412 Jul  6 15:28 mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz [[email protected] ~]# cat bb|more total 304856 -rw-r--r--  1 root root         2 Jul  1 11:42 ? -rw-------. 1 root root      1356 Oct  9  2015 anaconda-ks.cfg -rw-r--r--  1 root root       173 Jul  1 15:25 badtest -rw-r--r--  1 root root         0 Jul 12 16:46 bb drwxr-xr-x. 2 root root      4096 Jul  6 14:14 Desktop drwxr-xr-x. 2 root root      4096 Oct  9  2015 Documents drwxr-xr-x. 2 root root      4096 Oct  9  2015 Downloads -rwxr-xr-x. 1 root root       941 Oct 12  2015 eth0.sh -rw-r--r--  1 root root        63 Jul  1 11:28 if.s -rw-r--r--  1 root root      1937 Jul  6 15:52 installmysql -rw-r--r--  1 root root        32 Jul  1 17:12 logfile -rw-r--r--  1 root root       144 Jul 11 11:15 log.log drwxr-xr-x. 2 root root      4096 Oct  9  2015 Music -rw-r--r--  1 root root 311771412 Jul  6 15:28 mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz 通過輸出重定向符號,通常會顯示到顯示器的所有輸出會被shell重定向到指定的重定向空間。你也可以將資料追加到某個檔案。可以用>>符號完成 [[email protected] ~]# who >> bb [[email protected] ~]# cat bb total 304856 -rw-r--r--  1 root root         2 Jul  1 11:42 ? -rw-------. 1 root root      1356 Oct  9  2015 anaconda-ks.cfg -rw-r--r--  1 root root       173 Jul  1 15:25 badtest -rw-r--r--  1 root root         0 Jul 12 16:46 bb drwxr-xr-x. 2 root root      4096 Jul  6 14:14 Desktop drwxr-xr-x. 2 root root      4096 Oct  9  2015 Documents ...... root     pts/0        2016-07-12 09:55 (192.168.23.82) [[email protected] ~]# ls 0as > bbb ls: cannot access 0as: No such file or directory [[email protected] ~]# cat bbb 如果有錯誤資訊,不會被儲存到bbb檔案。如果想儲存到檔案,需要換種方式處理: STDERR shell 通過特殊的STDERR檔案描述符來處理錯誤訊息。 重定向錯誤: 1.只重定向錯誤 [[email protected] ~]# ls -al test2 test1 2>log1.log -rw-r--r-- 1 root root 70 Jul  1 11:32 test2 [[email protected] ~]# cat log1.log ls: cannot access test1: No such file or directory ls的正常STDOUT輸出仍然會發送到預設的STDOUT檔案描述符,也就是顯示器。由於該命令重定向了檔案描述符2的輸出 到了一個輸出檔案,shell將會生成的任何錯誤的訊息直接傳送到指定的重定向檔案中。 2.重定向錯誤和資料 如果你想重定向錯誤和正常輸出,你必須用兩個重定向符號。 [[email protected] ~]# ls -al test2 test1 2>log2.log test7 1>log3.log [[email protected] ~]# cat log2.log ls: cannot access test1: No such file or directory [[email protected] ~]# cat log3.log -rw-r--r-- 1 root root  70 Jul  1 11:32 test2 -rw-r--r-- 1 root root 155 Jul  1 15:02 test7 shell 用 1>符號將ls命令的本該輸出到STDOUT的正常輸出重定向到了log3檔案,錯誤訊息被重定向到啦log2檔案 如果你願意,可以將STDERR和STDOUT的輸出重定向到同一個輸出檔案。為此shell提供了特殊的重定向符號&>: [[email protected] ~]# ls -al test2 test1 test7 &>log4.log [[email protected] ~]# cat log4.log ls: cannot access test1: No such file or directory -rw-r--r-- 1 root root  70 Jul  1 11:32 test2 -rw-r--r-- 1 root root 155 Jul  1 15:02 test7 當使用&>符號時,命令生成的所有輸出都會發送到同一位置,包括資料和錯誤 3.在指令碼中重定向輸出 你可以在指令碼中用STDOUT和STDERR檔案描述符來在多個位置生成輸出 只要簡單的重定向相應的檔案描述符。有兩種方法在指令碼中重定向輸出: 臨時重定向每行輸出 永久重定向指令碼中的所有命令 4.臨時重定向: 如果你要故意在指令碼中生成錯誤資訊,可以單獨每一行輸出重定向到STDERR, 你所需要做的是吃用重定向符將輸出重定向到STDERR檔案描述符。在重定向到檔案 描述符時,你必須在檔案描述符數字前極愛一個and符& echo "this is an error message" >&2 [[email protected] ~]# echo "this is an error message" >&2 this is an error message [[email protected] ~]# [[email protected] ~]#vim test78 #!/bin/bash # testing STDERR message echo "This is an error " >&2 echo "this is normal output" [[email protected] ~]# sh test78 This is an error this is normal output 如果你在執行指令碼時重定向了STDERR,指令碼中所偶有定向到STDERR的文字都會被重定向 [[email protected] ~]# sh test78 2>log4.log this is normal output [[email protected] ~]# cat log4.log This is an error 正確資訊打印出來了,錯誤資訊重定向到log4.log 檔案裡面 5.永久重定向 如果指令碼中有大量資料需要重定向,那麼會很繁瑣你可以用 exec 命令告訴shell在指令碼執行期間重定向某個特定的檔案描述符號 vim test79 #!/bin/bash # redirecting all output to a file exec 1>log5.log echo  "this is a test of redirecting all output" echo "from a scriipt to antoher file" echo "whithcout having to redirect every individual" [[email protected] ~]# sh test79 [[email protected] ~]# cat log5.log this is a test of redirecting all output from a scriipt to antoher file whithcout having to redirect every individual exec 命令會啟動一個新shell並將STDOUT檔案描述符重定向到檔案,指令碼中發給STDOUT的所有輸出會被重定向到檔案 [[email protected] ~]# vim test80 #!/bin/bash # redirecting output to differect location exec 2>log6.log echo "this is the start of the script" echo "now redirecting all output to another location" exec 1>log7.log echo "this output should go to the testout file" echo "but this should go the testerror file" >&2 [[email protected] ~]# sh test80 this is the start of the script now redirecting all output to another location [[email protected] ~]# cat log6.log but this should go the testerror file [[email protected] ~]# cat log7.log this output should go to the testout file 6.在指令碼中重定向輸入 你可以使用在指令碼中用STDOUT 和 STDERR 的同樣方法來將STDIN從鍵盤重定向到其他位置。exec命令允許你將STDIN重定向到linux系統上的檔案中 exec 0< log8.log 這個命令告訴shell它應該從檔案log8.log中獲得輸入,而不是 STDIN。這個重定向只要在指令碼需要輸入時就會用 [[email protected] ~]# vim test81 #!/bin/bash #! redirecting file input exec 0< log6.log count=1 while read line do   echo "Line #$count:$line"   count=$[ $count+1 ] done [[email protected] ~]# sh test81 Line #1:this is first line Line #2:this is second line Line #3:this is third line

相關推薦

:shell呈現資料&定向

 呈現資料 顯示指令碼輸出的方法:在顯示器螢幕上顯示輸出將輸出重定向到檔案中 標準檔案描述符:   linux用檔案描述符來標識每個檔案物件。檔案描述符是一個非負整數,可以唯一的標識會話中開啟

shell函數的定義、執行、傳參和遞歸函數

shell函數的定義、執行、傳參 shell遞歸函數 shellfork××× 第五章 shell函數的定義、執行、傳參和遞歸函數 Bash(Bourne Again shell)也支持函數,在編寫大型復雜腳本的時候,可以用函數把代碼編寫成一個一個功能相對獨立的代碼塊,使代碼模塊塊、結構清晰、有效

Mysql必知必會Note- 排序檢索資料.md

排序資料 SQL檢索出的資料預設按照底層中出現的順序顯示,一般是資料最初的新增順序,但這種順序會受到資料更新的影響。因此,很多情景下都需要我們明確排序的順序,這裡我們可以通過ORDER BY子句實現。O

《利用Python進行資料分析》-pandas的資料結構介紹

pandas的資料結構介紹 要使用pandas,你首先就得熟悉它的兩個主要資料結構:Series和DataFrame。雖然它們並不能解決所有問題,但它們為大多數應用提供了一種可靠的、易於使用的基礎。 In [1]: from pandas import

管道符、定向、通配符、轉義字符及PATH

在線 com 老師 課程 轉義 image 通配符 分享圖片 定向 下班回家,早早打開電腦準備收聽老師的在線課程,講的生動細致,認真做筆記很重要!!!第三章 管道符、重定向、通配符、轉義字符及PATH

linux定向和管道

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

提供跟老男孩學Linux運維Shell編程實戰的四、源代碼

linux shell 第四章是講Shell變量知識進階與實踐;第五章是講變量的數值計算實踐;附件中包括源碼,請下載。該兩章在學習時要註意相關事項:1.註意標點符號的使用:例如,單引號,反引號,雙引號等;2.註意該要留空格的留空格;3.註意特殊變量的作用;4.內置變量的使用;5.算術運算任的使用。本文

shell正則表達式

shell正則表達式第十五章 shell正則表達式 見圖片 Shell正則表達式 正則表達式的分類 基本的正則表達式(Basic Regular Expression 又叫Basic RegEx 簡稱BREs) 擴展的正則表達式(Extended Regular Expression 又叫Extended

為什麼我要放棄javaScript資料結構與演算法()—— 連結串列

這一章你將會學會如何實現和使用連結串列這種動態的資料結構,這意味著我們可以從中任意新增或移除項,它會按需進行擴張。 本章內容 連結串列資料結構 向連結串列新增元素 從連結串列移除元素 使用 LinkedList 類 雙向連結串列 迴圈連結串列 第五章 連結串列 連結串列資

《SQL入門經典》筆記(:建立資料庫之操作資料

1. 資料操作語言(DML),用於修改關係型資料庫裡的資料和表。   2. SQL中三個基本的DML命令是: INSERT UPDATE DELETE SELECT(基本查詢命令)可以與DML配合使用。   3. INSERT:

《大型網站系統與JAVA中介軟體實踐》 資料訪問層

         兩階段提交                 &nbs

ip地址還原(資料結構課本實驗三)

目的:掌握基本遞迴演算法設計 內容:編寫程式exp5-3.cpp,恢復IP地址。給定一個僅僅包含數字的字串,恢復它的所有可能的有效IP地址。例如,給定字串為“22522511135”,返回“225.225.11.135”和“225.225.111.35”(順序可以任意)。 #include&

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

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

卜若的程式碼筆記系列-Web系列-SpringBoot-:使用url向伺服器傳遞資料-3204

1.springboot依舊可以是mvc的框架明白嗎? 關於mvc,可以看我mvc的系列,或者手動的學習下tomcat下的mvc。 2.你要向伺服器傳送資料,你首先得構建一個url,並且帶上引數 比如我這種 http://127.0.0.1:8080/save?key=

精益資料分析讀書筆記——-資料分析框架

戴夫·麥克盧爾的海盜指標說——AARRR 獲取使用者(Acquisition)、提高活躍度(Activation)、提高留存率(Retention)、獲取營收(Revenue)、自傳播(Referral) 要素 功用 相關指標 方式 獲取使用者

資料結構和演算法分析: 雜湊

散列表的實現常常叫做雜湊。雜湊是一種用於以常數平均時間執行插入、刪除和查詢的技術。 5.1 一般想法 散列表的資料結構是一個包括一些項(item)的具有固定大小的陣列。通常查詢是對於項的某個部分(即資料域)來進行的。這部分就叫做關鍵字。 每個關鍵字被對映到0到T

組合語言之第五章知識彙總 組合語言之第五章【BX】和loop指令 組合語言之包含多個段的程式 組合語言之更靈活的定位記憶體地址的方法 彙編實驗之章資料處理的兩個基本問題

      組合語言之第五章【BX】和loop指令   一:【bx】   【bx】和之前用過的【0】有些類似,都是表示記憶體單元,而它的偏移地址在bx中。段地址預設在ds中   描述一個記憶體單元 需要知道,1記憶體單元的地址,

資料分析:將大資料轉化為鉅額資金

  第4章構建大資料團隊   大資料專案最重要的元素之一是一個相當明顯但經常被忽視的專案:人。 沒有人工參與或解釋,大資料分析變得毫無用處,沒有任何目的,沒有價值。 需要一個團隊才能使大資料工作,即使該團隊只由兩個人組成,它仍然是一個必要的元素。 將人們聚集在一起

玩轉資料結構——:二分搜尋樹

內容概要: 為什麼要研究樹結構 二分搜尋樹基礎 向二分搜尋樹中新增元素 改進新增操作:深入理解遞迴終止條件 二分搜尋樹的查詢操作 二手搜尋樹的前序遍歷 二分搜尋樹的中序遍歷和後序遍歷 深入理解二分搜尋樹的前中後遍歷(深度遍歷) 二分搜尋樹是的

廣工 AnyviewC 資料結構習題

廣工 AnyviewC 資料結構習題 第五章 廣工 AnyviewC 資料結構習題 第五章 1【題目】試編寫如下定義的遞迴函式的遞迴演算法: 2【題目】試寫出求遞迴函式F(n)的遞迴演算法: 3【題目】求解平方根 的迭代函式定義如下: