SHELL指令碼的基礎知識5——顯示資料

來源:互聯網
上載者:User
一、輸入和輸出1、標準檔案描述符

每個進程中最多可以有9個開啟檔案的描述符:0——stdin,1——stdout,2——stderr。

(1)STDIN

     對於終端,stdin就是鍵盤。

     使用輸入重新導向符號(<)時,就將使用重新導向引用的檔案替換標準的輸入檔案描述符。

(2)STDOUT

     對於終端,stdout就是顯示器。

     使用輸出重新導向符號(>)時,就將使用重新導向引用的檔案替換標準的輸出檔案描述符。

     還可以使用>>,向檔案追加資料。

(3)STDERR

     shell將錯誤提示資訊與正常輸出資訊分開處理。預設情況下,stderr與stdout都是輸出到顯示器。

2、重新導向錯誤

    有幾種方法可以進行重新導向資料

(1)僅重新導向錯誤: 2> file   (2必須位於>的正前方,2與>之間不能有空格),此時標準輸出不受影響,仍然輸出到顯示器

(2)重新導向錯誤和資料:

       同時使用兩個重新導向輸出到不同檔案,2> file1, 1> file2

       輸出到同一個檔案:&> file

 

二、在指令碼中重新導向輸出

    使用指令碼重新導向輸出的方法有以下兩種

1、臨時重新導向

    重新導向到某個檔案描述符,必須在編號前加&號。ex:  >&2 (>& 間無空格)

    然後當這個檔案描述符對應的檔案被重新導向後,指令碼對應的重新導向輸出內容也同樣被重新導向。

2、永久重新導向

    可以使用exec命令通知shell在指令碼執行期重新導向特定的檔案描述符

    ex: exec 1>testout

重新導向stdout和stderr後,就無法輕鬆再重新導向回原來文字,需要提示(見下方)

 

三、在指令碼中重新導向輸入

    同樣使用exec即可,ex: exec 0< file

    對於讀取文本資料並使用指令碼處理,這是一個好方法。

 

四、建立自己的重新導向

    除了0,1,2外,其他3-8都可以用於建立自己的重新導向。

1、建立輸出檔案描述符

    同樣是先使用 exec 3>test13out,再將某一行     ……… >&3

2、重新導向檔案描述符

   可以將stdout等的原位置重新導向到備選檔案描述符,然後將該檔案描述符重新導向回stdout。

   ex:  exec 3>&1

         exec 1>file

         ……

         exec 1>&3

   這是一種臨時重新導向指令檔輸出然後恢複回普通設定的常用方法

3、建立輸入檔案描述符

    使用上方同樣的方法,可將stdin先儲存,再定向,再恢複

ex:   exec 6<&0

       exec 0< testfile

       …………

       exec 0<&6

4、建立讀取/寫入檔案描述符

     可以使用同一個檔案描述符從一個檔案讀取資料,同時向這個檔案寫入資料:
exec 3<> testfile

     內部將維護一個檔案指標,指示內部的位置,讀取和輸入都將發生在指標上次所指的位置

5、關閉檔案描述符

    使用&-進行關閉檔案描述符,ex :
exec 3>&- (之後就不可以再使用3了)

    如果再開同一檔案,將覆蓋之前資料

 

五、列出開放檔案描述符

    使用lsof命令可以列出整個系統上開放的檔案描述符。

    可以使用$$確定當前PID,ex: lsof -a -p $$ -d 0,1,2

   

六、禁止命令輸出

  將stderr重新導向到空檔案(/dev/null),則輸出的任何資料都不會儲存,即全部丟失。

  使用 cat /dev/null > testfile 就可以快速將testfile中所有資料全部抹除

 

七、使用臨時檔案

   /tmp目錄專門用於儲存臨時檔案,每次開機時,/tmp下的檔案都將自動刪除。

   可以使用mktemp命令,在/tmp下建立一個唯一的臨時檔案

1、建立本地臨時檔案

   mktemp 檔案名稱.xxxxxx 就可以在本地目錄建立一個唯一的檔案

   在指令碼中使用mktemp命令,需要使用一個變數儲存該檔案名稱。

2、在/temp中建立臨時檔案

   使用mktemp -t就可以在/temp下建立臨時檔案,返回的是完整路徑名

3、建立臨時目錄

   使用mktemp -d就可以在目前的目錄下建立臨時目錄

 

八、記錄訊息

   同時將訊息發送到監視器和檔案,就可以使用tee命令。

   ex: tee filename   將stdin的資料同時發送到stdout,和指定的檔案filename

   可以與管道命令配置使用重新導向任何命令的輸出:ex: date | tee testfile  

   預設情況下,每次使用tee都將覆蓋輸出檔案,使用-a就可以向檔案添加資料

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.