標籤:shell 重新導向
重新導向 概念: 將預設的輸入輸出改成其他的輸入輸出 檔案標識符 linux使用0-9指明特定進程相關的資料流,系統在啟動一個進程的時候會為該進程開啟三個檔案:標準輸入(stdin),標準輸出(stdout),標準錯誤輸出,分別使用檔案標識符0,1,2來標識,如果要為進程開啟其他的輸入輸出,則需要從整數3開始標識。預設情況下,標準輸入為鍵盤,標準輸出和錯誤輸出為顯示器 I/O重新導向 1、標準輸出覆蓋重新導向(>) ls -l > test.txt 注意:如果指定的檔案不存在,則命令會先建立檔案 上述命令相當於:ls -l 1>test.txt ls -l /usr/noExist 2> ls_noExist_err.txt 錯誤重新導向輸出 如果命令的輸出既有標準輸出,又有錯誤標準輸出,則可以分別指定不同標識符的內容 COMMAND 1> stdout.txt 2> stderr.txt 2、標準輸出追加重新導向(>>) 和>的用法一致,只是這個是追加,不會清空原檔案 3、標識輸出重新導向(>&) 標準輸出重新導向的作用是將一個標識的輸出重新導向到另一個標識的輸入。 例:將標準輸出和標準錯誤輸出同時重新導向到一個檔案 COMMAND > test.txt 2>&1 如果不關心錯誤輸出 COMMAND > test.txt 2> /dev/null #/dev/null是一個特殊裝置,像一個黑洞 4、標準輸入重新導向 < 5、管道(|) 6、exec exec是shell的內建命令, 7、Here Document 用於在命令中按行輸入文本,格式為<<delimiter,其中delimiter是一個用於標註的分割符,該分割符後所有的輸入都被當作是輸入的文本,直到出現下一個分隔字元。 這個的功能的出現主要是因為Ctrl+D輸入完成的訊號在互動環境下是可以的,但是在指令碼中卻無法使用。 例: #cat here.txt line1 line2 line3 line4 #現在想要在here.txt的第三行插入一個新行 #!/bin/bash ed here.txt <<END 3 d i this is new line3 . wq END #cat here.txt line1 line2 this is new line3 line4 也就是說,我們把要在終端輸入的命令全部寫道一個檔案裡,這個檔案相當於類比我們的鍵盤輸入 #對一串輸入字元排序 #!/bin/bash sort <<END sdt t dsaj dsg fdg we gh avf END 這樣就可以在任何時候任何時間對這些字串進行排序了。空格: 1、test 測試比較時,操作符兩側要有空格 2、if [] ,if 和 [] 之間要有空格 3、[ expression ] expression兩側要有空格 4、算數運算和賦值沒有空格 5、while與之後的expression有空格 如:while expression
shell學習筆記之九(重新導向)