linux啟動后,會默認打開3個文件描述符,分別是:標准輸入standard input 0,正確輸出standard output 1,錯誤輸出:error output 2
以后打開文件后。新增文件綁定描述符 可以依次增加。 一條shell命令執行,都會繼承父進程的文件描述符。因此,所有運行的shell命令,都會有默認3個文件描述符。
原文地址:
linux shell數據重定向(輸入重定向與輸出重定向)詳細分析 - 程默 - 博客園
http://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html
一個命令執行了:
先有一個輸入:輸入可以從鍵盤,也可以從文件得到
命令執行完成:成功了,會把成功結果輸出到屏幕:standard output默認是屏幕
命令執行有錯誤:會把錯誤也輸出到屏幕上面:standard error默認也是指的屏幕
文件輸入輸出由追蹤為一個給定的進程所有打開文件的整數句柄來完成。這些數字值就是文件描述符。最為人們所知的文件米描述符是 stdin, stdout 和stderr,文件描述符的數字分別是0,1和2。這些數字和各自的設備是保留的。一個命令執行前,先會准備好所有輸入輸出,默認分別綁定(stdin,stdout,stderr),如果這個時候出現錯誤,命令將終止,不會執行。命令解析過程,可以參考:Linux Shell 通配符、元字符、轉義符使用實例介紹
這些默認的輸出,輸入都是linux系統內定的,我們在使用過程中,有時候並不希望執行結果輸出到屏幕。我想輸出到文件或其它設備。這個時候我們就需要進行輸出重定向了。
linux shell下常用輸入輸出操作符是:
1. 標准輸入 (stdin) :代碼為 0 ,使用 < 或 << ; /dev/stdin -> /proc/self/fd/0 0代表:/dev/stdin
2. 標准輸出 (stdout):代碼為 1 ,使用 > 或 >> ; /dev/stdout -> /proc/self/fd/1 1代表:/dev/stdout
3. 標准錯誤輸出(stderr):代碼為 2 ,使用 2> 或 2>> ; /dev/stderr -> /proc/self/fd/2 2代表:/dev/stderr
記錄一段代碼。
1 #!/bin/sh 2 # 檢查腳本的運行參數,如果參數不等於兩個,則退出腳本 3 if [ ! $# -eq 2 ]; then 4 echo "Usage: Need parameters! Run: $0 2015 10 02" 5 exit 6 fi 7 #執行代碼 8 echo "Para1: $0 " #所執行的腳本名稱 9 echo "Para2: $1 " #所執行的腳本第一個參數 10 echo "Para3: $2 " #所執行的腳本第二個參數 11 echo "Para4: $3 " #所執行的腳本第三個參數 12 echo "Para10: ${10} " #所執行的腳本第十個參數 13 echo "Para11: ${11} " #所執行的腳本第十一個參數 14 echo "Para5: $# " #所執行的腳本參數個數 15 echo "Para6: $? " #上一個代碼或者shell程序在shell中退出的情況,如果正常退出則返回0,反之為非0值 16 echo "Para7: $@ " #傳遞給腳本參數列表,使用空格分隔每個參數,組成一個字符串 17 echo "Para8: $* " #腳本參數列表,作為一個參數組,使用時加引號 18 echo "Para9: $$ " #所執行腳本的當前進程ID 19 echo "Para1: $- " #顯示Shell使用的當前選項,與set命令功能相同。 20 echo "Para2: $! " #后台運行的最后個進程ID