功能:檢查文件類型和比較值。
測試的各種參數和用法。
測試表達式1–a表達式2
當表達式1和表達式2都為真時,值為真。
測試表達式1–o表達式2
當表達式1或表達式2為真時,該值為真。
測試–n字符串
或者
測試字符串
當字符串STRING的長度不為零時為True。
測試–z字符串
當字符串長度為零時,該值為true。
測試字符串1 =字符串2
當STRING1和STRING2的時間值相同時,為真。
測試字符串1!= STRING2
當STRING1和STRING2的不同值為真時。
測試整數1–eq整數2
當整數1等於整數2時,該值為真。
測試整數1–通用電氣整數2
當INTEGER1大於或等於INTEGER2時為True。
測試整數1–gt整數2
當整數1大於整數2時為True。
測試整數1–整數2
當INTEGER1小於或等於INTEGER2時為True。
測試整數1–lt整數2
當整數1小於整數2時為True。
測試整數1–ne整數2
當INTEGER1不等於INTEGER2時為True。
測試文件1–ef文件2
當文件1和文件2具有相同的設備號和索引節點號時為True(有關詳細信息,請參閱linux文件學習筆記)。
測試文件1–nt文件2
當文件1的修改時間比文件2的新值為真時。
測試文件1–ot文件2
當文件1的修改時間比文件2的舊值為真時。
測試-b文件
文件存在,並且內容屬於block類型。
測試–c文件
文件存在,並且是字符類型。
測試-d文件
文件存在並且是壹個目錄。
測試–e文件
文件存在嗎?
測試–f文件
文件存在,並且是正則表達式類型的文檔。
測試–g文件
文件存在,並且是set-group-ID,即SGID(有關詳細信息,請參閱後面的學習筆記)。
測試–G文件
文件存在,並由有效的組id擁有(有關詳細信息,請參閱後面的學習筆記)。
測試–h文件
文件存在,並且是壹個符號鏈接(詳見後面的學習筆記)。
測試-k文件
文件存在,並且設置了粘滯位(有關詳細信息,請參閱後面的學習筆記)。
測試–L文件
文件存在並且是壹個符號鏈接。
測試-O文件
文件存在,並且由有效的用戶id擁有。
測試–p文件
文件存在,並且是壹個命名管道(參見後面的學習筆記)。
測試-r文件
文件存在,並已被授予可讀權限。
測試文件
文件存在,並且大小大於0。
測試文件
文件存在並且是套接字。
測試–測試故障診斷
在終端中打開文件的描述符FD。
測試-u文件
文件存在,SUID已設置。
測試–w文件
文件存在,並且已被授予寫權限。
測試–x文件
文件存在,並已被授予可執行權限。
-
expr
Expr是linux的壹個手動命令行計數器,可以幫助我們完成壹些基本的表達式值運算。它也是壹個字符串處理工具。
(1)整數運算
$expr ARG1 | ARG2
$ expr arg 1 & amp;ARG2
$ expr arg 1 & lt;ARG2
$ expr arg 1 & lt;= ARG2
$expr ARG1 = ARG2
$expr ARG1!= ARG2
$ expr arg 1 & gt;= ARG2
$ expr arg 1 & gt;ARG2
$expr ARG1 + ARG2
$ expr arg 1–arg 2
$expr ARG1 * ARG2
使用乘法時,需要使用反斜杠進行轉義。
$expr ARG1 % ARG2
(2)字符串操作
$ expr length " XXX "//計算字符串長度。
$ expr substr "這是壹個" pos length//從pos位截斷長度的子串。
$ expr index " tesr " e//獲取e在主字符串中第壹次出現的位置。
(3)增量計數
例子
循環=3
loop = ' expr $ loop+1 '
echo $loop
結果是4。在第二行代碼中,使用了後引號,shell會將後引號中的內容作為系統命令。這樣,就好像我們在命令行輸入expr $loop+1,這個命令的返回結果就被賦給了這個循環。
(4)模式匹配(根據正則表達式模式匹配字符串)
通過指定冒號選項來計算字符串中的字符數。。*表示任何字符重復0次或更多次。
& gtVALUE=account.doc
& gt表達式$值:'。*'
八
您可以在expr中使用字符串匹配操作,其中您使用模式來提取。doc文件。
$ expr $ VALUE:“\(。*\).醫生
帳目
(5)其他
+令牌
將TOKEN解釋為字符串,無論它是關鍵字還是運算符。
擴展知識:
引號的作用
1雙引號("")
1)使用" "來引用除$(美元符號)、`(反引號)和\(反斜杠)以外的任何字符或字符串。雙引號並不妨礙shell對這三個字符做特殊處理(表示變量名、命令替換、反斜杠轉義)。
eg:name = gezn;Echo "用戶名:$ name "//將打印用戶名:gezn。
Echo "日期是:` date+date-% d-% m-% y ` "//日期是:03-05-2009將被打印。
將打印echo–e " $ user \ t $ uid "//gezn 500。
2)如果要搜索包含空格的新字符串,經常使用雙引號。
2個單引號(“”)
1)如果字符串用單引號括起來,那麽dayi9nhao中字符串中任何特殊字符的特殊含義都會被屏蔽掉。
2)例如:echo–e ' $ USER \ t $ UID '/$ USER $ UID將被打印出來(由於選項"-e ",不會被屏蔽)。
echo ' USER \ t $ UID '//將打印$USER\t$UID。
3個反引號(``)
1) shell shell將後引號中的內容作為系統命令並執行其內容。使用此方法將輸出替換為變量。
2)例如:a=`date+date-%d-%m-%Y` //將打印日期為:03-05-2009。
4.反斜杠(\)
1)如果下壹個字符有特殊含義,反斜杠防止shell誤解其含義,即屏蔽其特殊含義。
2)從屬字符包含特殊含義:* + $ ` " |?
3)當打印字符串時要添加八進制字符(ASCII對應字符)時,必須在前面加壹個反斜杠,否則shell將作為普通數字使用。
例:bj =北京;echo " variable \ $ bj = $ bj "//將打印變量$bj = beijing。
-
外殼特殊變量
在Shell中,預定義了幾個具有特殊含義的Shell變量,它們的值只能由Shell根據實際情況進行賦值,不能由用戶進行重置。殼的特殊變量包括它的位置和壹些系統變量。
(1)常見位置變量:
命令行上實際參數的數量,但不包括Shell腳本名稱。
$?執行最後壹個命令後的返回值(也稱為“退出代碼”)。這是壹個十進制數。大部分Shell命令執行成功時,返回值為0;如果執行失敗,將返回壹個非零值。
當前進程的進程號。
$!最後壹條後臺命令對應的進程號,是由1~5位數字組成的數字串。
$-由當前Shell設置的執行標誌名組成的字符串。例如:
命令行set -xv為Shell設置標誌-x和-v(用於跟蹤輸出)。
$ *表示命令行上實際給出的所有參數字符串,不限於9個參數。
$ @它的基本功能和$ *壹樣,只是用在引號中,每個參數都用引號返回。
$0腳本名稱
$1 ...$9第n個參數
下面的aaa bbb是變量名。
${aaa:-bbb}如果$aaa為空或未定義,則值為$bbb。否則,該值為$aaa。
${aaa:+bbb}如果$aaa不為空,則值為$bbb,否則為空。
${aaa:=bbb}如果$aaa不為空,則取$aaa的值,否則取$bbb的值並賦值(aaa=bbb)。
${aaa:3}如果aaa=abcdefg,${aaa:3}的值為:defg,相當於substr,計數從0開始。
${aaa:3:2}同上;${ AAA:3:2 }的值是:de,相當於substr。
${#aaa}字符串$aaa的長度。
(2)常見系統變量:
$HOME用戶的主目錄
$USER用戶名
$ TERM用戶所屬的$組的名稱
$PATH默認搜索路徑
$HOSTNAME的主機名
$ TERM tz時區
存儲$MAIL的$ TERM的路徑名
練習手:
#!/bin/bash
回顯$0
回聲$*
echo $@
echo $#
echo $$
回聲$_
在終端窗口中執行:
。/test . sh-a-b–c/home
。/test.sh
-a -b -c /home
-a -b -c /home
四
3250
/首頁
區分$ *和$ @編寫以下test.sh腳本:
#!/bin/bash
功能測試標記
{
回顯" $# args "
}
testargs "$* "
測試標記“$@”
未設置測試標記
在終端窗口中執行:
。/test.sh -a -b /home
1 args //顯然只有壹個,傳入的是字符串$ *,而不是被解釋的參數。
3 args //$@必須匹配引號,這樣結果才是正確的。
#!/bin/bash
功能測試標記
{
回顯" $# args "
}
testargs $*
testargs $@
未設置測試標記
同樣,還有:
。/test.sh -a -b /home
3個參數
3個參數
作者:阿迦。J
資料來源:blogs.com/aga-j.