1. 管道和重定向mysql
(i) 要讓第二條命令只有在第一條命令成功完成以後才執行,能夠用一個 && 符號把兩條命令隔開。例如:sql
$ ls /usr/local/dir-name 2> /dev/null && cd /usr/local/dir-name
該命令表示先 ls /usr/local/ 目錄下的 dir-name 文件夾,若是存在這個文件夾,就執行 cd /usr/local/dir-name 命令進入這個文件夾;若是不存在這個目錄,則不執行 cd 命令。 ' 2 > /dev/null ' 命令表示將錯誤信息重定向到 /dev/null ,即不顯示錯誤信息。shell
2. 變量和引用apache
對於用單引號和雙引號括起來的字符串而言,shell以類似的方式處理它們,例外指出在於雙引號括起來的變量能夠進行替換(用*和?這樣的文件名匹配元字符作擴展)和變量擴展。左引號也叫左撇號,對它的處理和雙引號相似,可是它們還有其餘做用,即可以把字符串的內容按一條shell 命令來執行,而且用該命令的輸出來替換這個字符串。例如:bash
root@javis:~$ echo "$APACHE_HOME" /usr/local/apache2 root@javis:~$ echo '$APACHE_HOME' $APACHE_HOME
#將 $APACHE_HOME 當作命令來處理,所以出錯 root@javis:~$ echo `$APACHE_HOME` bash: /usr/local/apache2: Is a directory
3.常見的過濾命令spa
(i) cut : 把行分紅域命令行
cut 命令從它的輸入行中選出若干部分,再打印出來。該命令最多見的用法是提取被限定的若干域。默認的限定符是<Tab>,可是能夠用 -d 選項改變這個限定符。 -f 選項指定輸出裏包含哪些域。code
參考下面介紹的 uniq 命令一節的內容,瞭解 cut 用法的例子。blog
(ii) sort : 將行排序排序
sort 命令對輸入行進行排序。----到底按照每行的哪些部分(即「關鍵字」)進行排序,以及進行排序的順序,均可以作精細的調整。下表給出一些比較常見的選項:
選項 | 含義 |
-b | 忽略開頭的空白 |
-f | 排序不區分大小寫 |
-k | 指定構成排序關鍵字的列 |
-n | 按整數值比較域 |
-r | 顛倒排序的順序[即逆序排序] |
-t | 設定域分隔符(默認的分隔符是空白) |
-u | 只輸出惟一記錄[重複的記錄只輸出一次] |
下面的命令展現出了數值排序和字典排序的不一樣之處,默認按字典排序。這兩條命令都用了 -t: 和 -k3,3 兩個選項,對 /etc/group 文件的內容按照由冒號分隔的第三個域(即組ID)進行排序。第一條命令按照數值排序,而第二條命令按照字母排序:
root@javis:~$ sort -t: -k3,3 -n /etc/group root:x:0: bin:x:1: daemon:x:2: sys:x:3: adm:x:4: .............
root@javis:~$ sort -t: -k3,3 /etc/group root:x:0: bin:x:1: wheel:x:10: users:x:100: boss:x:1000:boss mysql:x:1001: .................
(iii) uniq: 重複行只打印一次
uniq 命令在思想上和 sort -u 相似,但它有一些 sort 不能模擬的選項: -c 累計每行出現的次數, -d 只顯示重複行,而 -u 只顯示不重複的行。 uniq 命令的輸入必須先排好序,所以一般把它放在 sort 命令以後運行。
例如,下面的命令顯示出:有 3 個用戶把 /bin/bash 做爲本身的登陸 shell,1 個用戶把 /bin/sync 做爲登陸的 shell ,等等:
root@javis:~$ cut -d: -f7 /etc/passwd | sort | uniq -c 3 /bin/bash 1 /bin/sync 1 /sbin/halt 39 /sbin/nologin 1 /sbin/shutdown
(iv) wc: 統計行數、字數、字符數
統計一個文件裏的行數、字數、字符數是另外一項經常使用的操做,wc(表示 word count , 即字數統計)命令時完成這項操做的一條方面途徑。若是不帶任何參數運行wc ,它會顯示所有 3 種統計結果:
root@javis:~$ wc /etc/passwd 45 91 2352 /etc/passwd
而參數 -l 、-w 、 -c 分別使 wc 輸出文件內容的 行數 、字數 、字符數:
root@javis:~$ wc /etc/passwd -l 45 /etc/passwd root@javis:~$ wc /etc/passwd -w 91 /etc/passwd root@javis:~$ wc /etc/passwd -c 2352 /etc/passwd
(v) tee:把輸入複製到兩個地方
命令的管道通常都是線性的,可是從中間插入管道里的數據流,而後把一份副本發送到一個文件裏,或者送到終端窗口上,也每每會有幫助。用 tee 命令就能作到這一點,該命令把本身的標準輸入既發送到標準輸出,又發送到在命令行上指定的一個文件裏。能夠把它想象成水管上接的一個三通。
例如,下面的命令將 date 的輸出值發送到標準輸出,並重定向輸出到 date.txt 文件:
root@javis:~$ date | tee ./date.txt 2016年 07月 19日 星期二 11:37:58 CST
下面的命令原本應當在標準時輸出上有顯示,但重定向到 wc 後進行了行數統計,因而在標準輸出上沒有顯示:
root@javis:~$ date | tee date.txt | wc -l 1