標準輸入:從終端獲得命令,對於計算機來講,是從終端得到了命令,執行完了之後,結果和執行狀態或者錯誤提示又會發回終端,這叫標準輸出。linux
輸入輸出重定向就是從終端之外的別的地方獲得輸入,或者向終端之外的別的地方輸出。shell
命令和說明:bash
command > file 將輸出重定向到 file。
command < file 將輸入重定向到 file。
command >> file 將輸出以追加的方式重定向到 file。
n > file 將文件描述符爲 n 的文件重定向到 file。 #文件描述符,能夠理解爲內核給打開的文件的標識,它和文件不是一一對應的,0標準輸入,1標準輸出,2標準錯誤
n >> file 將文件描述符爲 n 的文件以追加的方式重定向到 file。
n >& m 將輸出文件 m 和 n 合併。
n <& m 將輸入文件 m 和 n 合併。
<< tag 將開始標記 tag 和結束標記 tag 之間的內容做爲輸入。函數
下面是詳解:spa
輸出重定向通常在終端命令行裏的比較多,在腳本比較少。命令行
實例1:echo "hello linux!">t3.sh (hello linux就跑到t3,.sh裏去了)想看的話須要cat t3.shcode
實例2:blog
demoFun(){ echo "這是個人第一個 shell 函數!" #這是函數主體,前一行後一行有大括號 } demoFun >t3.sh #這是個人第一個 shell 函數! 就跑到t3.sh裏去了
原本須要從鍵盤獲取輸入的命令會轉移到文件讀取內容。排序
command < filename 意思是把c o m m a n d命令以f i l e n a m e文件做爲標準輸入生命週期
實例1:wc -l <t3.sh(以t3.sh做爲標準輸入之後,算一算t3裏有幾行文件)說實話,此處的做用和wc -l t3.sh是同樣的,可是運行方法仍是不一樣的。
實例2:commed < infile > outfile,從文件infile讀取內容,而後將輸出寫入到outfile中。
好比:sort <name.txt >name.out,
從name.txt中獲取文件內容,排序之後輸出到name.out中
補充:重定向操做符
例子1:cat >> myfile <<MAYDAY #<<MAYDAY的意思是,把MAYDAY和下一個MAYDAY(別的沒有歧義的字符也能夠)之間的內容當作輸入,重定向到cat中,而>>myfile會把cat的內容輸出重定向到myfile文件中。
例子2:
$ sort << el #任意字符均可以,常見的是EOF #該命令的意思是把el和el之間的內容輸入重定向到sort heredoc> 345 heredoc> 123 heredoc> ndj heredoc> abd heredoc> el #輸出結果以下 123 345 abd ndj
通常狀況下,每一個 Unix/Linux 命令運行時都會打開三個文件:
默認狀況下,command > file 將 stdout 重定向到 file,command < file 將stdin 重定向到 file。
若是但願 stderr 重定向到 file,能夠這樣寫:command 2 > file
若是但願標準錯誤和標準輸出都重定向到一個文件中,能夠這樣寫:command > file 2>&1 #理解爲把標準錯誤先重定向到標準輸出中,再把標準輸出重定向到file中。
任何重定向到這個文件:/dev/null的輸出,都不會有結果,由於它禁止輸出。
若是腳本中有大量的輸出須要重定向,使用上面的臨時重定向方式就很是繁瑣,能夠採用exec命令指定腳本生命週期內的重定向文件描述符,以下例子。
#!/bin/bash # 在腳本執行期間全部的標準輸出都會保存到文件syslog exec 1> syslog #把全部的標準輸出全都輸出到syslog去 dir=/home/yarn/bash01 for file in $dir/* do if [ -d "$file" ] then echo "$file is a directory!" fi
#!/bin/bash exec 0< filename #標準輸入來自filename,filename的內容是:hehe \n haha \n while read line do echo "From file parameter is $line" done #獲得結果: hehe haha
經過exec命令把標準輸入設備鍵盤重定向到文件,將配置信息寫入到文件,在腳本中循環讀取文件中的信息並賦值給變量並在腳本運行期間引用。經過read命令能夠從命令行讀取用戶輸入到的參數,當標準輸入重定向到文件後,read命令一樣能夠從文件中讀取記錄。