特殊字符用來處理參數
$# 傳遞到腳本的參數個數
$* 以一個單字符串顯示全部向腳本傳遞的參數。
如"$*"用「"」括起來的狀況、以"$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