Linuxshell
必需要知道一個東西:Linux系統將每一個對象看成文件處理,輸入輸出對象也是如此。bash
Linux 標準文件描述符:this
文件描述符 | 縮寫 | 描述 |
0 | STDIN | 標準輸入 |
1 | STDOUT | 標準輸出 |
2 | STDERR | 標準錯誤 |
解釋,對終端接口,標準輸入是鍵盤。不少bash命令經過STDIN接受輸入,eg,cat命令 cat>testcat 將接受的輸入重定向到testcat文件。對終端接口:標準輸出是終端監視器。,eg ,ls -l > testls 將標準輸出重訂向到testls文件。STDERR,表述shell處理運行錯誤,運行腳本時,對這種錯誤實際上是很關注的,記錄下來頗有用。spa
使用shell 的時候 ">"表示輸出重定向,1>,2>兩種組合,就是對標準輸出,和錯誤輸出兩種的區別。code
[root@iZ28npved5eZ tmp]# ls -l test sad//不區分的時候 ls: cannot access sad: No such file or directory -rwxr--r-- 1 root root 49 May 3 10:19 test
對標準輸出進行重定向:對象
ls -l test sad 1>tets ls: cannot access sad: No such file or directory
對標準錯誤進行重定向:接口
ls -l test sad 2>tets -rwxr--r-- 1 root root 49 May 3 10:19 test
熱身結束了,在腳本中重定向來了。
ip
臨時重定向:table
[root@iZ28npved5eZ tmp]# cat test #!/bin/bash #this is stderr echo "this is error" >&2 //標記成標準錯誤 echo "this is sucess" //使用 [root@iZ28npved5eZ tmp]# ./test 2>error this is sucess //標準錯誤就被定向到error文件中,之因此稱爲臨時重定向在與 ./test 2>error 能夠任意修改爲 ./test 1>sucess 這樣又是另一種結果了。
永久重定向:class
cat test #!/bin/bash #this is stderr exec 1>sucess //將標準輸出重定向到sucess文件 echo "this is error" >&2 echo "this is sucess" //使用 ./test this is error
更復雜一點的就是多種重定向在一個腳本中同時存在,就須要,本身注意永久重定向所申明的位置。(也能夠本身定義重定向文件描述符)
文件重定向輸入(其實和管道用處很類似,將某個文件的內容當標準輸入重定向進來)
cat test #!/bin/bash #this is stderr exec 0<script //將script文件內容當標準輸入重定向進來 while read line do echo $line done //用法 ./test { grep -c $1 chen }
還有一些比較偏的用法:禁止命令輸入:重定向到 /dev/null 文件就會直接把定向的所有丟棄。