文件描述符(fd):文件描述符是一個非負整數,在打開現存文件或新建文件時,內核會返回一個文件描述符,讀寫文件也須要使用文件描述符來訪問文件。shell
內核爲每一個進程維護該進程打開的文件記錄表。文件描述符只適於Unix、Linux操做系統。數組
文件描述符bash |
描述運維 |
映射關係ide |
0spa |
標準輸入,鍵盤操作系統 |
/dev/stdin -> /proc/self/fd/0orm |
1blog |
標準輸出,屏幕進程 |
/dev/stdout -> /proc/self/fd/1 |
2 |
標準錯誤,屏幕 |
/dev/stderr -> /proc/self/fd/2 |
符號 |
描述 |
> |
符號左邊輸出做爲右邊輸入(標準輸出) |
>> |
符號左邊輸出追加右邊輸入 |
< |
符號右邊輸出做爲左邊輸入(標準輸入) |
<< |
符號右邊輸出追加左邊輸入 |
& |
重定向綁定符號 |
輸入和輸出能夠被重定向符號解釋到shell。
shell命令是從左到右依次執行命令。
下面n字母是文件描述符。
1)覆蓋輸出
通常格式:[n]>word
若是n沒有指定,默認是1
示例:
打印結果寫到文件:echo "test" > a.txt
當沒有安裝bc計算器時,錯誤輸出結果寫到文件:echo "1 + 1" |bc2 > error.log
2)追加劇定向輸出
通常格式:[n]>>word
若是n沒有指定,默認是1
示例:
打印結果追加到文件:echo "test" >> a.txt
當沒有安裝bc計算器時,錯誤輸出結果追加文件:echo "1 + 1" |bc2 > error.log
通常格式:[n]<word
若是n沒有指定,默認是0
示例:
a.txt內容做爲grep輸入:grep "test" --color < a.txt
1)覆蓋重定向標準輸出和標準錯誤
兩種格式重定向標準輸出和標準錯誤:
&>word和>&word 等價於 >word 2>&1
&將標準輸出和標準輸入綁定到一塊兒,重定向word文件。
示例:
當不肯定執行對錯時都覆蓋到文件:echo "1 + 1" |bc &> error.log
當不肯定執行對錯時都覆蓋到文件:echo "1 + 1" |bc > error.log 2>&1
2)追加標準輸出和標準錯誤
追加格式:&>>word 等價於>>word2>&1
當不肯定執行對錯時都追加文件:echo "1 + 1" |bc &>> error.log
將標準輸出和標準標準輸入追加劇定向到word:
<<[-]word
here-document
delimiter
從當前shell讀取輸入源,直到遇到一行只包含delimiter終止,內容做爲標準輸入。
將eof標準輸入做爲cat標準輸出再寫到a.txt:
# cat << eof 123 abc eof 123 abc # cat > a.txt << eof > 123 > abc > eof
/dev/null是一個空設備,向它寫入的數組都會丟棄,但返回狀態是成功的。與其對應的還有一個/dev/zero設備,提供無限的0數據流。
在寫Shell腳本時咱們常常會用到/dev/null設備,將stdout、stderr輸出給它,也就是咱們不想要這些輸出的數據。
經過重定向到/dev/null忽略輸出,好比咱們沒有安裝bc計算器,正常會拋出沒有發現命令:
# echo "1 + 1" |bc >/dev/null 2>&1
這就讓標準和錯誤輸出到了空設備。
忽略標準輸出:
# echo "test" >/dev/null
忽略錯誤輸出:
# echo "1 + 1" |bc 2>/dev/null
博客地址:http://lizhenliang.blog.51cto.com
QQ羣:323779636(Shell/Python運維開發羣)
read命令從標準輸入讀取,並把輸入的內容複製給變量。
命令格式: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars][-p prompt] [-t timeout] [-u fd] [name ...]
-e |
在一個交互shell中使用readline獲取行 |
-r |
不容許反斜槓轉義任何字符 |
-s |
隱藏輸入 |
-a array |
保存爲數組,元素以空格分隔 |
-d delimiter |
持續讀取直到遇到delimiter第一個字符退出 |
-i text |
將test文本做爲 |
-n nchars |
讀取nchars個字符返回,而不是等到換行符 |
-N nchars |
讀取nchars個字符返回,除非遇到文件結束符或超時,其餘分隔符都被忽略 |
-p prompt |
提示信息 |
-t timeout |
等待超時時間,秒 |
-u fd |
指定文件描述符號碼做爲輸入,默認是0 |
name |
變量名 |
示例:
獲取用戶輸入保存到變量: # read -p "Please input your name:" VAR Please input your name: lizhenliang # echo $VAR lizhenliang 用戶輸入保存爲數組: # read -p "Please input your name:" -a ARRAY Please input your name: a b c # echo ${ARRAY[*]} a b c 遇到e字符返回: # read -d e VAR 123 456 e # echo $VAR 123 456 從文件做爲read標準輸入: # cat a.txt adfasfd # read VAR < a.txt # echo $VAR adfasfd while循環讀取每一行做爲read的標準輸入: # cat a.txt |while read LINE; do echo$LINE; done 123 abc 分別變量賦值: # read a b c 1 2 3 # echo $a 1 # echo $b 2 # echo $c 3 # echo 1 2 3 | while read a b c;do echo"$a $b $c"; done 1 2 3