Linux 的字符串截取很有用。有八種方法。
假設有變量 var=http://www.aaa.com/123.htm
1. # 號截取,刪除左邊字符,保留右邊字符。
echo ${var#*//}
其中 var 是變量名,# 號是運算符,*// 表示從左邊開始刪除第一個 // 號及左邊的所有字符
即刪除 http://
結果是 :www.aaa.com/123.htm
2. ## 號截取,刪除左邊字符,保留右邊字符。
echo ${var##*/}
##*/ 表示從左邊開始刪除最後(最右邊)一個 / 號及左邊的所有字符
即刪除 http://www.aaa.com/
結果是 123.htm
3. %號截取,刪除右邊字符,保留左邊字符
echo ${var%/*}
%/* 表示從右邊開始,刪除第一個 / 號及右邊的字符
結果是:http://www.aaa.com
4. %% 號截取,刪除右邊字符,保留左邊字符
echo ${var%%/*}
%%/* 表示從右邊開始,刪除最後(最左邊)一個 / 號及右邊的字符
結果是:http:
5. 從左邊第幾個字符開始,及字符的個數
echo ${var:0:5}
其中的 0 表示左邊第一個字符開始,5 表示字符的總個數。
結果是:http:
6. 從左邊第幾個字符開始,一直到結束。
echo ${var:7}
其中的 7 表示左邊第8個字符開始,一直到結束。
結果是 :www.aaa.com/123.htm
7. 從右邊第幾個字符開始,及字符的個數
echo ${var:0-7:3}
其中的 0-7 表示右邊算起第七個字符開始,3 表示字符的個數。
結果是:123
8. 從右邊第幾個字符開始,一直到結束。
echo ${var:0-7}
表示從右邊第七個字符開始,一直到結束。
結果是:123.htm
注:(左邊的第一個字符是用 0 表示,右邊的第一個字符用 0-1 表示
運算符部分簡單記錄:
下表列出了常用的算術運算符,假定變量 a 爲 10,變量 b 爲 20:
運算符 | 說明 | 舉例 |
---|---|---|
+ | 加法 | `expr $a + $b` 結果爲 30。 |
- | 減法 | `expr $a - $b` 結果爲 -10。 |
* | 乘法 | `expr $a \* $b` 結果爲 200。 |
/ | 除法 | `expr $b / $a` 結果爲 2。 |
% | 取餘 | `expr $b % $a` 結果爲 0。 |
= | 賦值 | a=$b 將把變量 b 的值賦給 a。 |
== | 相等。用於比較兩個數字,相同則返回 true。 | [ $a == $b ] 返回 false。 |
!= | 不相等。用於比較兩個數字,不相同則返回 true。 | [ $a != $b ] 返回 true。 |
-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。 |
運算符 | 說明 | 舉例 |
---|---|---|
! | 非運算,表達式爲 true 則返回 false,否則返回 true。 | [ ! false ] 返回 true。 |
-o | 或運算,有一個表達式爲 true 則返回 true。 | [ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
-a | 與運算,兩個表達式都爲 true 才返回 true。 | [ $a -lt 20 -a $b -gt 100 ] 返回 false。 |
&& | 邏輯的 AND | [[ $a -lt 100 && $b -gt 100 ]] 返回 false |
|| | 邏輯的 OR | [[ $a -lt 100 || $b -gt 100 ]] 返回 true |
= | 檢測兩個字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 檢測兩個字符串是否相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 檢測字符串長度是否爲0,爲0返回 true。 | [ -z $a ] 返回 false。 |
-n | 檢測字符串長度是否爲0,不爲0返回 true。 | [ -n $a ] 返回 true。 |
str | 檢測字符串是否爲空,不爲空返回 true。 | [ $a ] 返回 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。 |
echo "XXX" > filename -- 輸入結果到制定文件中
echo `XXX` 這個符號有很多XXX函數可以執行,例如:echo `date` --會輸出當前時間
printf的轉義序列
序列 | 說明 |
---|---|
\a | 警告字符,通常爲ASCII的BEL字符 |
\b | 後退 |
\c | 抑制(不顯示)輸出結果中任何結尾的換行字符(只在%b格式指示符控制下的參數字符串中有效),而且,任何留在參數裏的字符、任何接下來的參數以及任何留在格式字符串中的字符,都被忽略 |
\f | 換頁(formfeed) |
\n | 換行 |
\r | 回車(Carriage return) |
\t | 水平製表符 |
\v | 垂直製表符 |
\\ | 一個字面上的反斜槓字符 |
\ddd | 表示1到3位數八進制值的字符。僅在格式字符串中有效 |
\0ddd | 表示1到3位的八進制值字符 |
test 擴展符號:
文件測試
參數 | 說明 |
---|---|
-e 文件名 | 如果文件存在則爲真 |
-r 文件名 | 如果文件存在且可讀則爲真 |
-w 文件名 | 如果文件存在且可寫則爲真 |
-x 文件名 | 如果文件存在且可執行則爲真 |
-s 文件名 | 如果文件存在且至少有一個字符則爲真 |
-d 文件名 | 如果文件存在且爲目錄則爲真 |
-f 文件名 | 如果文件存在且爲普通文件則爲真 |
-c 文件名 | 如果文件存在且爲字符型特殊文件則爲真 |
-b 文件名 | 如果文件存在且爲塊特殊文件則爲真 |
until 循環
until循環執行一系列命令直至條件爲真時停止。
until循環與while循環在處理方式上剛好相反。
一般while循環優於until循環,但在某些時候—也只是極少數情況下,until循環更加有用。
until 語法格式:
until condition do command done
條件可爲任意測試條件,測試發生在循環末尾,因此循環至少執行一次—請注意這一點。
$# | 傳遞到腳本的參數個數 |
$* | 以一個單字符串顯示所有向腳本傳遞的參數 |
$$ | 腳本運行的當前進程ID號 |
$! | 後臺運行的最後一個進程的ID號 |
$@ | 與$*相同,但是使用時加引號,並在引號中返回每個參數。 |
$- | 顯示Shell使用的當前選項,與set命令功能相同。 |
$? | 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。 |
command > file | 將輸出重定向到 file。 |
command < file | 將輸入重定向到 file。 |
command >> file | 將輸出以追加的方式重定向到 file。 |
n > file | 將文件描述符爲 n 的文件重定向到 file。 |
n >> file | 將文件描述符爲 n 的文件以追加的方式重定向到 file。 |
n >& m | 將輸出文件 m 和 n 合併。 |
n <& m | 將輸入文件 m 和 n 合併。 |
<< tag | 將開始標記 tag 和結束標記 tag 之間的內容作爲輸入。 |
如果希望執行某個命令,但又不希望在屏幕上顯示輸出結果,那麼可以將輸出重定向到 /dev/null:
$ command > /dev/null