Linux Shell

特殊字符用來處理參數

$#  傳遞到腳本的參數個數
$*  以一個單字符串顯示全部向腳本傳遞的參數。
    如"$*"用「"」括起來的狀況、以"$1 $2 … $n"的形式輸出全部參數。
$$  腳本運行的當前進程ID號
$!  後臺運行的最後一個進程的ID號
$@  與$*相同,可是使用時加引號,並在引號中返回每一個參數。
    如"$@"用「"」括起來的狀況、以"$1" "$2" … "$n" 的形式輸出全部參數。
$-  顯示Shell使用的當前選項,與set命令功能相同。
$?  顯示最後命令的退出狀態。0表示沒有錯誤,其餘任何值代表有錯誤。

關係運算符

-eq     檢測兩個數是否相等,相等返回 true。    [ $a -eq $b ] 返回 false。
-ne     檢測兩個數是否不相等,不相等返回 true。  [ $a -ne $b ] 返回 true。
-gt     檢測左邊的數是否大於右邊的,若是是,則返回 true。     [ $a -gt $b ] 返回 false。
-lt     檢測左邊的數是否小於右邊的,若是是,則返回 true。     [ $a -lt $b ] 返回 true。
-ge     檢測左邊的數是否大於等於右邊的,若是是,則返回 true。   [ $a -ge $b ] 返回 false。
-le     檢測左邊的數是否小於等於右邊的,若是是,則返回 true。   [ $a -le $b ] 返回 true。

文件測試符

-b file     檢測文件是不是塊設備文件,若是是,則返回 true。  [ -b $file ] 返回 false。
-c file     檢測文件是不是字符設備文件,若是是,則返回 true。     [ -c $file ] 返回 false。
-d file     檢測文件是不是目錄,若是是,則返回 true。     [ -d $file ] 返回 false。
-f file     檢測文件是不是普通文件(既不是目錄,也不是設備文件),若是是,則返回 true。    [ -f $file ] 返回 true。
-g file     檢測文件是否設置了 SGID 位,若是是,則返回 true。  [ -g $file ] 返回 false。
-k file     檢測文件是否設置了粘着位(Sticky Bit),若是是,則返回 true。  [ -k $file ] 返回 false。
-p file     檢測文件是不是有名管道,若是是,則返回 true。   [ -p $file ] 返回 false。
-u file     檢測文件是否設置了 SUID 位,若是是,則返回 true。  [ -u $file ] 返回 false。
-r file     檢測文件是否可讀,若是是,則返回 true。  [ -r $file ] 返回 true。
-w file     檢測文件是否可寫,若是是,則返回 true。  [ -w $file ] 返回 true。
-x file     檢測文件是否可執行,若是是,則返回 true。     [ -x $file ] 返回 true。
-s file     檢測文件是否爲空(文件大小是否大於0),不爲空返回 true。     [ -s $file ] 返回 true。
-e file     檢測文件(包括目錄)是否存在,若是是,則返回 true。    [ -e $file ] 返回 true。

cut

-b :以字節爲單位進行分割。這些字節位置將忽略多字節字符邊界,除非也指定了 -n 標誌。
-c :以字符爲單位進行分割。
-d:自定義分隔符,默認爲製表符。
-f:與-d一塊兒使用,指定顯示哪一個區域。
-n:取消分割多字節字符。

sed

-e  <script>或--expression=<script> 以選項中指定的script來處理輸入的文本文件。
-f  <script文件>或--file=<script文件> 以選項中指定的script文件來處理輸入的文本文件。
-n  或--quiet或--silent 僅顯示script處理後的結果。
a :新增, a 的後面能夠接字串,而這些字串會在新的一行出現(目前的下一行)~
c :取代, c 的後面能夠接字串,這些字串能夠取代 n1,n2 之間的行!
d :刪除,由於是刪除啊,因此 d 後面一般不接任何咚咚;
i :插入, i 的後面能夠接字串,而這些字串會在新的一行出現(目前的上一行);
p :打印,亦即將某個選擇的數據印出。一般 p 會與參數 sed -n 一塊兒運行~
s :取代,能夠直接進行取代的工做哩!一般這個 s 的動做能夠搭配正規表示法!
例子:
1 在第四行後添加新字符串
    sed -e 4a\newline testfile  
2 第二行後面加入兩行字
    nl /etc/passwd | sed '2a Drink tea or ......\
    > drink beer ?'
3 第2-5行的內容取代成爲『No 2-5 number』
    nl /etc/passwd | sed '2,5c No 2-5 number'
4 搜索 /etc/passwd有root關鍵字的行
    nl /etc/passwd | sed '/root/p'
5 刪除/etc/passwd全部包含root的行,其餘行輸出
    nl /etc/passwd | sed  '/root/d'
6 搜索/etc/passwd,找到root對應的行,執行後面花括號中的一組命令,每一個命令之間用分號分隔,這裏把bash替換爲blueshell,再輸出這行
    nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'

awk

-F fs or --field-separator fs
    指定輸入文件折分隔符,fs是一個字符串或者是一個正則表達式,如-F:。
    -v var=value or --asign var=value
    賦值一個用戶定義變量。
    -f scripfile or --file scriptfile
    從腳本文件中讀取awk命令。
    -mf nnn and -mr nnn
    對nnn值設置內在限制,-mf選項限制分配給nnn的最大塊數目;-mr選項限制記錄的最大數目。這兩個功能是Bell實驗室版awk的擴展功能,在標準awk中不適用。
    -W compact or --compat, -W traditional or --traditional
    在兼容模式下運行awk。因此gawk的行爲和標準的awk徹底同樣,全部的awk擴展都被忽略。
    -W copyleft or --copyleft, -W copyright or --copyright
    打印簡短的版權信息。
    -W help or --help, -W usage or --usage
    打印所有awk選項和每一個選項的簡短說明。
    -W lint or --lint
    打印不能向傳統unix平臺移植的結構的警告。
    -W lint-old or --lint-old
    打印關於不能向傳統unix平臺移植的結構的警告。
    -W posix
    打開兼容模式。但有如下限制,不識別:/x、函數關鍵字、func、換碼序列以及當fs是一個空格時,將新行做爲一個域分隔符;操做符**和**=不能代替^和^=;fflush無效。
    -W re-interval or --re-inerval
    容許間隔正則表達式的使用,參考(grep中的Posix字符類),如括號表達式[[:alpha:]]。
    -W source program-text or --source program-text
    使用program-text做爲源代碼,可與-f命令混用。
例子:
1 每行按空格或TAB分割,輸出文本中的一、4項
    awk '{print $1,$4}' log.txt.
2 使用","分割
    awk -F, '{print $1,$2}'   log.txt
3 使用多個分隔符。先使用空格分割,而後對分割結果再使用","分割
    awk -F '[ ,]'  '{print $1,$2,$5}'   log.txt
4 輸出第二列包含 "th",並打印第二列與第四列
    awk '$2 ~ /th/ {print $2,$4}' log.txt
相關文章
相關標籤/搜索