bash數據流重定向與管道

bash (Bourne-Again SHell) 是當前衆多Linux系統的默認shell,擁有強大的功能,便於人們操縱使用Linux系統。 html

bash中使用的一些特殊符號有: shell

符 號 內 容
# 批註符號,這個最常被使用在script當中,視爲說明。其後的數據均不執行

轉義符號,將特殊字符或通配符還原成通常字符
| 管道 (pipe),分隔兩個管道命令的界定
; 連續命令執行分隔符,連續性命令的界定
$ 適用變量前導符,便是變量以前須要加的變量替代值
& 做業控制 (job control),將命令轉到後臺工做
>與>> 數據流重定向,輸出嚮導,分別是「替換」與「累加」
<與<< 數據流重定向,輸入嚮導,分別是「鍵盤輸入」與「結束輸入」
' ' 單引號,不具備變量置換的功能
" " 雙引號,具備變量置換的功能
` ` 能夠先執行的命令,也可以使用$()
( ) 子shell的起始與結束
{ } 命令塊的組合

1. 輸出重定向

舉例說明: bash

#屏幕本應該顯示的標準輸出(stdout)內容重定向轉存到test.txt文件中
#若是test.txt文件已存在,則覆蓋
$ ls -al ~ > ~/test.txt

#屏幕本應該顯示的標準輸出內容重定向轉存到test.txt文件中 (數據累加而不覆蓋)
$ ls -al ~ >> ~/test.txt

#將標準輸出內容重定向到test.txt中,標準錯誤輸出則重定向到test2.txt中,均爲累加方式而非覆蓋
$ ls -al /test/ >> ~/test.txt 2>> ~/test2.txt

#將標準輸出內容與標準錯誤輸出內容均重定向至test.txt中,累加方式
$ find /home/ -name "test.txt" &>> ~/test.txt                   #正確寫法
$ find /home/ -name "test.txt" >> ~/test.txt 2>>&1              #正確寫法
$ find /home/ -name "test.txt" >> ~/test.txt 2>> ~/test.txt     #錯誤寫法

#將標準錯誤輸出內容丟棄,只在屏幕上顯示標準輸出內容
$ find /home/ -name "test.txt" 2> /dev/null

2. 輸入重定向

<的做用:用文本文件內容或設備來源代替鍵盤輸入 less

<<的做用:結束輸入 (不經常使用) spa

舉例說明: code

#建立一個文本文件test3.txt,內容爲 /home/lsy/,以 end 爲結束輸入
$ cat > test3.txt << "end"
> /home/lsy/
> end         在此處按下回車
$             查看當前目錄下,存在test3.txt文件

#下面這條命令的執行效果同 ls -al /home/lsy/
$ ls -al < test3.txt

3. 管道

管道|用於鏈接兩個命令,即以「|」左邊命令的標準輸出,做爲右邊命令的標準輸入,以下所示: htm

command1 | command2 | command3
stdout1  => stdin2
            stdout2 => stdin3

管道命令只會處理標準輸出,而對於標準錯誤輸出則會忽略。並且,管道右邊的命令,必需可以接收標準輸入,如less、more、grep、cut等命令,而ls、cp、mv等命令不能接收標準輸入,於是不能放在管道右邊。 ip

舉個例子: get

rpm -qa --last | less     #用less來查看顯示結果

4. 雙向重定向

命令tee能夠截獲標準輸出 (不能截獲標準錯誤輸出),傳給一個文件或設備,同時保留做爲標準輸出繼續交給下一步處理。用法以下: 博客

tee [-a] file/device
-a : 以累加的方式,將數據流加入file中

#將 ls -al 的執行結果以累加方式保存至test.txt中,並顯示在屏幕上
$ ls -al | tee -a test.txt

#將 ls -al 的執行結果以累加方式保存至test.txt中,並顯示在屏幕上(用less命令查看)
$ ls -al | tee -a test.txt | less

#將 ls -al 的執行結果分別保存至test.txt、test2.txt中,均以累加方式寫入
$ ls -al | tee -a test.txt >> test2.txt
請遵循這份 著做權協議 (Use License), 如需轉載請註明來自 yang仔博客
相關文章
相關標籤/搜索