bash資料流重定向與管道

2021-07-31 07:06:17 字數 2390 閱讀 7310

bash (bourne-again shell) 是當前眾多linux系統的預設shell,擁有強大的功能,便於人們操縱使用linux系統。

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

符 號內 容#

批註符號,這個最常被使用在script當中,視為說明。其後的資料均不執行

\轉義符號,將特殊字元或萬用字元還原成一般字元

|管道 (pipe),分隔兩個管道命令的界定

;連續命令執行分隔符,連續性命令的界定

$適用變數前導符,即是變數之前需要加的變數替代值

&作業控制 (job control),將命令轉到後台工作

>與》

資料流重定向,輸出嚮導,分別是「替換」與「累加」

《與<<

資料流重定向,輸入嚮導,分別是「鍵盤輸入」與「結束輸入」

' '單引號,不具有變數置換的功能

" "雙引號,具有變數置換的功能

` `可以先執行的命令,也可使用$()

( )子shell的起始與結束

命令塊的組合

1. 輸出重定向

舉例說明:

#螢幕本應該顯示的標準輸出(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. 輸入重定向

《的作用:結束輸入 (不常用)

舉例說明:

#建立乙個文字檔案test3.txt,內容為 /home/lsy/,以 end 為結束輸入

$ cat > test3.txt << "end"

> /home/lsy/

> end 在此處按下回車

$ 檢視當前目錄下,存在test3.txt檔案

#下面這條命令的執行效果同 ls -al /home/lsy/

$ ls -al < test3.txt

3. 管道

管道|用於連線兩個命令,即以「|」左邊命令的標準輸出,作為右邊命令的標準輸入,如下所示:

command1 | command2 | command3

stdout1 => stdin2

stdout2 => stdin3

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

舉個例子:

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

資料流重定向

重定向,將原本輸出到標準輸出的資料重定向到乙個檔案中,因為標準輸出 dev stdout 本身也是乙個檔案,我們將命令輸出導向另乙個檔案自然也是沒有任何問題的。下面我們簡單的回顧一下我們前面經常用到的兩個重定向操作 echo hello shiyanlou redirect echo www.jly...

資料流重定向

管道預設是連線前乙個命令的輸出到下乙個命令的輸入 linux中提供三個標準輸入與輸出 檔案路徑 檔案作用 dev stdin 用於標準輸入 dev stdout 用於標準輸出 dev stderr 用於錯誤輸出 簡單的重定向 通過管道把檔案的輸出作為cat的輸出,並把cat的輸出作為檔案test的輸...

資料流重定向

linux在你登入時,便將預設的標準輸入 標準輸出 標準錯誤輸出安排成你的終端。i o重定向就是你通過與終端互動,或者在shell script裡設定,重新安排從 輸入或者輸出到 每個程式都應該有標準輸入 輸出 錯誤輸出 重定向的方法大抵有 管道等 先了解stdin stdout stderr。標準...