UNIX/Linux系統管理技術手冊(1)----腳本和shell

 

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
相關文章
相關標籤/搜索