1. 程式人生 > >【Linux 系統程式設計】shell 輸入/輸出重定向

【Linux 系統程式設計】shell 輸入/輸出重定向

source: http://blog.csdn.net/u011974987/article/details/52703400

前言

原本計劃國慶節第一天假期休息一天,但是想想自己還有很多事情沒有完成,就立馬開啟電腦,開始幹活了。打算這7天的假期好好整理下之前學的技術和鞏固練習,充實每一天,好了入正題,Linux shell指令碼基礎前面我們在介紹Linux shell指令碼的控制流程時,還有一部分內容沒講就是有關here document的內容這裡繼續,Here Document 是 Shell 中的一種特殊的重定向方式,用來將輸入重定向到一個互動式 Shell 指令碼或程式。

正文

1、Shell 輸入/輸出重定向

重定向命令列表如下:
命令 說明
command > file 將輸出重定向到 file。
command < file 將輸入重定向到 file。
command >> file 將輸出以追加的方式重定向到 file。
n > file 將檔案描述符為 n 的檔案重定向到 file。
n >> file 將檔案描述符為 n 的檔案以追加的方式重定向到 file。
n >& m 將輸出檔案 m 和 n 合併。
n <& m 將輸入檔案 m 和 n 合併。
<< tag 將開始標記 tag 和結束標記 tag 之間的內容作為輸入。
  • 需要注意的是檔案描述符 0 通常是標準輸入(STDIN),1 是標準輸出(STDOUT),2 是標準錯誤輸出(STDERR)。
1.1、輸出重定向

重定向一般通過在命令間插入特定的符號來實現,語法如下:

command1 > file1
  • 1
  • 1

上面這個命令執行command1然後將輸出的內容存入file1。

注意任何file1內的已經存在的內容將被新內容替代。如果要將新的內容新增到檔案的末尾,則使用>>操作符。

例子

我們先新建一個檔案test2,然後執行 ls -al 重定向到test2檔案中,在命令列的操作符程式碼如下:

#新建test2檔案
touch test2    
#輸出重定向
ls -al > test2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

然後我們使用cat命令檢視檔案內容:

[email protected]:/usr/xiho/shell# cat test3
total 132
drwxr-xr-x 2 root root  4096 Oct  1 13:19 .
drwxr-xr-x 4 root root  4096 Sep 27 16:29 ..
-rw-r--r-- 1 root root 12288 Sep 27 19:15 .01.sh.swo
-rw-r--r-- 1 root root 12288 Sep 27 16:35 .01.sh.swp
-rwxr--r-- 1 root root   347 Sep 28 21:07 02.sh
-rwxr--r-- 1 root root   100 Sep 28 21:28 03.sh
-rw-r--r-- 1 root root 12288 Sep 28 21:15 .03.sh.swp
-rwxr--r-- 1 root root   109 Sep 28 22:17 04.sh
-rw------- 1 root root 12288 Sep 30 18:03 .04.swp
-rw-r--r-- 1 root root     0 Sep 28 22:45 05.sh
-rw-r--r-- 1 root root 12288 Sep 28 22:47 .05.sh.swp
-rw-r--r-- 1 root root     0 Sep 30 20:57 06.sh
-rw-r--r-- 1 root root 12288 Sep 30 21:00 .06.sh.swp
-rwxrwxrwx 1 root root   223 Sep 30 17:50 b.sh
-rw-r--r-- 1 root root 12288 Sep 30 18:03 .b.sh.swo
-rw-r--r-- 1 root root 12288 Sep 28 16:50 .b.sh.swp
-rwxrwxrwx 1 root root   119 Oct  1 13:12 demo.sh
-rwxr--r-- 1 root root    68 Sep 30 14:09 test1.sh
-rw-r--r-- 1 root root   954 Oct  1 13:10 test2
-rw-r--r-- 1 root root     0 Oct  1 13:19 test3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

就會把當前目錄下的所有檔案給顯示出來了。

如果不希望檔案內容被覆蓋,可以使用 >> 追加到檔案末尾,這個請自行練習使用。

1.2、輸入重定向

和輸出重定向一樣,Unix 命令也可以從檔案獲取輸入,語法為:

command1 < file1
  • 1
  • 1

這樣,本來需要從鍵盤獲取輸入的命令會轉移到檔案讀取內容。注意:輸出重定向是大於號(>),出入重定向是小於號(<)。

例子

接著上面的例子,我們統計test2檔案的行數,(不熟悉命令的同學,請檢視我的 shell命令(二)的文章),執行以下命令:

 wc -l test2
 21 test2
  • 1
  • 2
  • 1
  • 2

也可以將輸入重定向到test2檔案中:

wc -l < test2
21
  • 1
  • 2
  • 1
  • 2

注意:上面兩個例子的結果不同;第一個例子,會輸出檔名;第二不會,因為它僅僅知道從標準輸入讀取內容。

 command1 < infile > outfile
  • 1
  • 1

同時替換輸入和輸出,執行command1,從檔案infile讀取內容,然後將輸出寫入到outfile中。

1.3、重定向深入理解

一般情況下,每一個Linux 命令執行時都會開啟三個檔案:

  • 標準輸入檔案(stdin): stdin的檔案描述符為0,linux程式預設從stdin讀取資料。
  • 標準輸出檔案(stdout): stdout 的檔案描述為1,linux程式預設想stdout輸出資料。
  • 標準錯誤檔案(stderr): stderr 的檔案描述符為2,linux程式會想stderr流中寫入錯誤資訊。

以後開啟檔案後。新增檔案繫結描述符 可以依次增加。 一條shell命令執行,都會繼承父程序的檔案描述符。因此,所有執行的shell命令,都會有預設3個檔案描述符。

正常情況下,command > file 將stdout重定向file,command < file 將stdin 重定向到 file。

一個命令執行了: 
先有一個輸入:輸入可以從鍵盤,也可以從檔案得到 
命令執行完成:成功了,會把成功結果輸出到螢幕:standard output預設是螢幕 
命令執行有錯誤:會把錯誤也輸出到螢幕上面:standard error預設也是指的螢幕

如果希望stderr 重定向 到file 可以這樣寫:

command 2> file
  • 1
  • 1

如果希望stderr追加到file 檔案末尾,可以這樣寫:

command 2>> file
  • 1
  • 1
  • 例項(通俗易懂)

顯示當前目錄檔案,寫一個實際存在和一個不存在的,方便理解。比如當前目錄存在test1.sh,不存在xiho。程式碼如下:

root@iZ28t5k4ny4Z:/usr/xiho/shell# ls test1.sh xiho 
ls: cannot access xiho: No such file or directory
test1.sh
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

看到上面程式碼顯示在螢幕上面,找不到檔案路勁報錯,正確輸出與錯誤輸出都顯示在螢幕了,但是現在需要把正確輸出寫入suc.txt, 1> 可以省略,不寫,預設所至標準輸出,把錯誤輸出到err.txt,不輸出到螢幕。

例子如下:

ls test1.sh xiho 1> suc.txt 2>err.txt
  • 1
  • 2
  • 1
  • 2

然後我們分別檢視suc.txt和err .txt的資訊。

這裡寫圖片描述

將錯誤輸出資訊關閉掉

root@iZ28t5k4ny4Z:/usr/xiho/shell# ls test1.sh xiho 2>&-
test1.sh
root@iZ28t5k4ny4Z:/usr/xiho/shell# ls test1.sh xiho 2>/dev/null
test1.sh

&[n] 代表是已經存在的檔案描述符,&1 代表輸出 &2代表錯誤輸出 &-代表關閉與它繫結的描述符
/dev/null 這個裝置,是linux 中黑洞裝置,什麼資訊只要輸出給這個裝置,都會給吃掉,哈哈~
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

其他的追加操作符等,好玩的自己去試試。

注意: 
1、shell遇到”>”操作符,會判斷右邊檔案是否存在,如果存在就先刪除,並且建立新檔案。不存在直接建立。 無論左邊命令執行是否成功。右邊檔案都會變為空。 
2、“>>”操作符,判斷右邊檔案,如果不存在,先建立。以新增方式開啟檔案,會分配一個檔案描述符[不特別指定,預設為1,2]然後,與左邊的標準輸出(1)或錯誤輸出(2) 繫結。 
3、當命令:執行完,繫結檔案的描述符也自動失效。0,1,2又會空閒。 
4、一條命令啟動,命令的輸入,正確輸出,錯誤輸出,預設分別繫結0,1,2檔案描述符。 
5、一條命令在執行前,先會檢查輸出是否正確,如果輸出裝置錯誤,將不會進行命令執行。

2、Here Document

Here Document是shell 中的一種特殊重定向方式,用來將輸入重定向到一個互動式的shell指令碼或程式。

基本的格式如下:

command << EOF
    document
EOF
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

它的作用是將兩個EOF之間的內容(docuemnt)作為輸入傳遞給command。

注意: 
- 結尾的EOF一定要頂個寫,前面不能有任何字元,後面也不能有任何字元,包括空格和tab縮排。 
- 開始的EOF前後的空格不要被忽略掉。

  • 例項

在命令列中通過wc -l 命令計算Here Document 的行數:

root@iZ28t5k4ny4Z:/usr/xiho/shell# wc -l << EOF
> 學習使用shell 程式設計
> www.xuhaoblog.com
> EOF
2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

輸出的結果為2行。

我們也可以將Here Document 用在指令碼中,例如:

1 #!/bin/bash                                                            
  2 cat << EOF
  3 學習使用shell指令碼程式設計
  4 www.xuhaoblog.com
  5 EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

執行以上指令碼輸出的結果:

root@iZ28t5k4ny4Z:/usr/xiho/shell# chmod u+x 05.sh 
root@iZ28t5k4ny4Z:/usr/xiho/shell# ./05.sh
學習使用shell指令碼程式設計
www.xuhaoblog.com
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

Here Document 的簡單使用就到這裡,還有更多的操作符需要我們去練習。Linux shell指令碼基礎學習,我們差不多介紹完了,還有一個關於函式的,準備放到下一篇來講。歡迎關注~

更多相關係列文章傳送門:

【CSDN】Linux Shell指令碼基礎學習系列


相關推薦

Linux 系統程式設計shell 輸入/輸出定向

source: http://blog.csdn.net/u011974987/article/details/52703400 前言 原本計劃國慶節第一天假期休息一天,但是想想自己還有很多事情沒有完成,就立馬開啟電腦,開始幹活了。打算這7天的假期好好整理下之前學的

Linux 系統程式設計常用的一些基本命令

前言 Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁碟操作、檔案存取、目錄操作、程序管理、檔案許可權設定等。所以,在Linux系統上工作離不開使用系統提供的命令。要想真正理解Linux系統,就必須從Linux命令學起,通過基礎的命令學

Linux shell 輸入/輸出定向—/dev/null檔案

個人分類: Linux/Unix相關 如果希望執行某個命令,但又不希望在螢幕上顯示出輸出的結果,那麼可以將輸出重定向到/dev/null:   $ command > /dev/null /dev/null是一個特殊的檔案,寫入到它的內容都會被丟棄;如果嘗試

Shell 腳本學習筆記十:Shell輸入輸出定向

描述符 獨立 文件重定向 eof 輸出 合並 包含 span 輸出重定向 command > file 將輸出重定向到 file。 command < file 將輸入重定向到 file。 command >> file

Shell腳本編程之Shell輸入/輸出定向

設備 dev oob out 發送 信息 合並 標準輸出 文件描述符 1.大多數情況下UNIX系統命令從你的終端接受輸入並將所產生的輸出發送回到你的終端 重定向命令列表如下: 2.輸出重定向: 重定向一般通過命令間插入特定的符號來實現; #!/

Shell 輸入/輸出定向

技術分享 輸入 spa 文件 標準輸入 文件描述 錯誤 roc 傳遞 stdin輸入可以從鍵盤,也可以從文件得到 stout命令執行完成,把成功結果輸出到屏幕,默認是屏幕 stderr命令執行有錯誤,把錯誤也輸出到屏幕上面,默認也是屏幕 文件描述符 標準輸入stdin:

shell 輸入輸出定向

mman 標準 寫入 交互式 code class 定向 列表 span 1. 命令列表: command > file 將輸出重定向到file command < file 將輸入重定向到file command >> file 將輸出以追加的方式

Shell輸入/輸出定向

本文主要講解Shell的輸入/輸出重定向的相關知識 一個命令通常從一個叫標準輸入的地方讀取輸入,預設情況下,這恰好是你的終端。同樣,一個命令通常將其輸出寫入到標準輸出,預設情況下,這也是你的終端

shell 輸入 輸出定向

Shell 輸入/輸出重定向 大多數 UNIX 系統命令從你的終端接受輸入並將所產生的輸出傳送回​​到您的終端。一個命令通常從一個叫標準輸入的地方讀取輸入,預設情況下,這恰好是你的終端。同樣,一個命令通常將其輸出寫入到標準輸出,預設情況下,這也是你的終端。 重定向命令

Unix shell輸入輸出定向

基於 clear 關聯 什麽 概念 定向 files 幫助 原來 敲代碼的時候,適當地打印出一些進度或者日誌信息經常能幫助我們跟蹤程序的執行結果。可是,這些結果或者日誌打印信息到屏幕

6、Shell 程式設計輸入/輸出定向

大多數 UNIX 系統命令從你的終端接受輸入並將所產生的輸出傳送回到您的終端。一個命令通常從一個叫標準輸入的地方讀取輸入,預設情況下,這恰好是你的終端。同樣,一個命令通常將其輸出寫入到標準輸出,預設情況下,這也是你的終端。 重定向命令列表如下: 命令

Linux系統學習程序與執行緒

程序執行新程式 程序等待 wait()函式 程序執行新程式 fork()/exec()組合是典型的Linux

Linux 網路程式設計TCP網路程式設計中connect()、listen()和accept()三者之間的關係

基於 TCP 的網路程式設計開發分為伺服器端和客戶端兩部分,常見的核心步驟和流程如下: connect()函式:對於客戶端的 connect() 函式,該函式的功能為客戶端主動連線伺服器,建立連線是通過三次握手,而這個連接的過程是由核心完成,不是這個函式完成的,這個函式的作用僅僅是通知 Linux 核心

Linux學習之Shell基礎——Bash基本功能——輸入輸出定向

1、標準輸入輸出 裝置 裝置檔名 檔案描述符 型別 鍵盤 /dev/stdin 0 標準輸入 顯示器 /dev/sdtout 1

Linux網路程式設計基於TCP多程序(fork)版本客戶端/伺服器

客戶端程式碼: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h

shell中的輸入輸出定向——shell程式設計學習_四

shell中的輸入輸出輸入輸出重定向一般情況,我們的標準輸入是鍵盤,標準輸出是終端顯示器;但是在很多情況,我們需要從檔案中讀取資料作為輸入,然後將輸出資料儲存在檔案中。這是我們就需要將標準輸入從鍵盤重定向到檔案,將標準輸出重定向到檔案,這個過程就是輸入輸出重定向。輸出重定向輸

8.1 shell介紹 8.2 命令歷史 8.3 命令補全和別名 8.4 通配符 8.5 輸入輸出定向

8.1 shell介紹 8.2 命令歷史 8.3 命令補全和別名 8.4 通配符 8.5 輸入輸出重定向8.1 shell介紹 8.2 命令歷史 8.3 命令補全和別名 8.4 通配符 8.5 輸入輸出重定向 # Linux shell 基礎 # 8.1 shell 介紹 - 什麽是shell 1

shell介紹,命令歷史,命令補全和別名,通配符,輸入輸出定向

重定向 輸入輸出 history 筆記內容:l 8.1 shell介紹l 8.2 命令歷史l 8.3 命令補全和別名l 8.4 通配符l 8.5 輸入輸出重定向筆記日期:2017.8.11 8.1 shell介紹Shell俗稱殼(用來區別於核),是指“提供使用者使用界面”的軟件(命令解析器)。sh

shell介紹、命令歷史、命令補全和別名、通配符、輸入輸出定向

linux基礎shell介紹shell是一個命令解釋器,提供用戶和機器之間的交互,支持特定語法,比如邏輯判斷、循環,每個用戶都可以有自己特定的shellCentOS7默認shell為bash(Bourne Agin Shell)還有zsh、ksh等命令歷史查看歷史命令[root@test76 ~]# cat

shell介紹、歷史命令、命令補全和別名、通配符、輸入輸出定向

linuxshell介紹shell是系統跟計算機硬件交互時使用的中間介質,它只是系統的一個工具。在計算機硬件之間還有一層東西——系統內核。如果把計算機硬件比作一個人的軀體,那系統內核就是人的大腦。至於shell,把它比作人的五官似乎更貼切些。言歸正傳,用戶直接面對的不是計算機硬件而是shell,用戶把指令告訴