1. 重定向符號及含義
注意:箭頭流向即是數據的流向.
數字0:標准輸入(standard input,簡寫stdin),數據從右往左方向流動 | |
數字1:標准正確輸出(standard output,簡寫stdout),數據從左往右流動 | |
數字2:標准錯誤輸出(standard error output,簡寫stderr),數據從左往右流動 | |
> 或 1> | 把正確的進行輸出(標准輸出),覆蓋 |
>> 或 1>> | 把正確的進行輸出(標准輸出),追加 |
2> | 把錯誤的進行輸出,覆蓋 |
2>> | 把錯誤的進行輸出,追加 |
< 或 0< | 一般通過文件來輸入重定向,如tr命令使用較多(0一般省略不寫) |
<< 或 0<< | 追加輸入重定向,一般cat命令用的多,在shell腳本中(0一般省略不寫) |
&> | 合並正確和錯誤輸出,覆蓋重定向 |
&>> | 合並正確和錯誤輸出,追加重定向 |
COMMAND > /path 2> /path2 | 正確或錯誤(標准輸出和標准輸入)輸出至不同位置 |
COMMAND > /path 2> &1 | 把錯誤輸出導入正確輸出的文件中 |
COMMAND > /path 2>> &1 | 追加 |
&>/dev/null | 正確和錯誤的都重定向到空 |
COMMAND > /dev/null 2>&1 | 定向到空(同上一個) |
2. 特殊符號/通配符及含義
通配符:通配符是bash的內置功能,其適用范圍在命令行中的普通命令及腳本編程中,跟linux正則表達式有一些區別.
通配符的目的:bash中用於實現文件名"通配",通配符僅僅匹配字符.
符號 | 含義 |
######路徑位置 | |
. | 當前目錄 |
.. | 上一級目錄 |
- | 上一次所在目錄 |
~ | 用戶家目錄 |
######模糊匹配 | |
* | 匹配任意長度的任意字符 |
? | 匹配任意單個字符,有且只有一個字符 |
! | 取反(正則表達式中,不支持在grep中使用;在find/sed/awk中表示取反) |
[] | 匹配指定范圍內(中括號內)的任意單個字符 |
[^] | 匹配指定范圍外(中括號之外)的任意單個字符(非) |
[!] | 取反,等價於[^] |
######引號 | |
'' | 單引號,強引用,所見即所得,不會做解釋 |
"" | 雙引號,弱引用,雙引號中的變量或命令或轉移字符會先被解釋 |
`` | 反引號,引用命令,解釋命令(等價於 $() 或 ${} ) |
######其他特殊符號 | |
\ | 轉義字符,還原原本的意義 |
; | 多個命令之間的分隔符(-exec命令中,分號;代表bash的特殊意義) |
| | 管道COMMAND1 | COMMAND2 | COMMAND3| …后一個命令會將前一個 命令的標准輸出,當做要執行的對象 |
$ | 1)代表普通用戶的提示符; 2)$(string)代表字符串變量內容 |
# | 1)在文本中,前面加#代表行內容被注釋; 2)超級管理員的提示符 |
{} | 1)可以生成序列; 2)shell腳本編程中,用作引用變量,作為變量與普通字符的 分隔,讓變量成為一個整體 |
3. 專用字符集合及其含義
注意:專用字符在命令行中一般需加中括號[]括起來,所以,下表整理成對出現.
字符 | 含義 |
[[:alnum:]] | 任意數字或字母,匹配大小寫字母和數字,等價於字符類'[:alpha:]'與字符類'[:digit:]'的和 |
[[:alpha:]] | 任意大小寫字母,匹配大小寫字母,等價於字符類'[:lower:]'和字符類'[:upper:]'的和 |
[[:blank:]] | 空白字符類,包括:空格和制表符 |
[[:cntrl:]] | 控制字符 |
[[:digit:]] | [0-9] 中的任意數字 |
[[:graph:]] | 圖片和圖形 |
[[:lower:]] | [a-z] 任意小寫字母 |
[[:print:]] | 可打印字符,字符類'[:alnum:]'與字符類'[:punct:]'和空格的和 |
[[:punct:]] | 任意標點符號 |
[[:space:]] | 任意空格字符 |
[[:upper:]] | [A-Z] 任意大寫字母 |
[[:xdigit:]] | 十六進制字符 |
4. bash中的邏輯運算符
注意:
1)邏輯運算符遵循從左往右的順序進行運算,邏輯運算符&&和||是短路符號,符號左右兩邊的命令之間具有邏輯關系.
2)聯合使用 && 和 || 的時候,先判斷 邏輯與 再判斷 邏輯或
符號 | 含義 |
&& (COMMAND1 && COMMAND2) |
與運算and.COMMAND1執行成功,沒有報錯,COMMAND2才會執行; 若COMMAND1執行報錯,則COMMAND2不會被執行. 判斷命令執行是否成功的依據是echo $? ,若結果是0, 則是命令執行成功,若是其他數值,都是代表命令執行失敗. |
|| (COMMAND1 || COMMAND2) |
或運算or.當COMMAND1執行成功,沒有報錯,COMMAND2不會被執行; 若COMMAND1執行報錯,則COMMAND2會被執行 |
! | 1)在bash中表示取反; 2)調用history最近歷史命令 |
; (COMMAND1;COMMAND2) |
分號前面的命令出錯也不影響后面的命令執行,即COMMAND 1; COMMAND2都會被執行 |
& (COMMAND1 & COMMAND2) |
將命令放到后台去執行;如果&兩邊都是命令,則前面的命令會被放到后台執行, 后面的命令也會同時執行,這兩者之間沒有邏輯關系,命令是並行執行的. |