test指令(使用指令man查詢)
創(chuàng)新互聯(lián)建站長期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為陵川企業(yè)提供專業(yè)的成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè),陵川網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
功能:檢查文件類型,值比較。
test的各種參數(shù)和使用。
test EXPRESSION1 –a EXPRESSION2
當(dāng)表達(dá)式1和表達(dá)式2同時為真時值為真
test EXPRESSION1 –o EXPRESSION2
當(dāng)表達(dá)式1或者表達(dá)式2為真時值為真
test –n STRING
或者
test STRING
當(dāng)STRING串的長度不為零時值為真
test –z STRING
當(dāng)STRING串長度為零時值為真
test STRING1 = STRING2
當(dāng)STRING1和STRING2相同時值為真
test STRING1 != STRING2
當(dāng)STRING1 和 STRING2不同時值為真
test INTEGER1 –eq INTEGER2
當(dāng)INTEGER1等于INTEGER2時值為真
test INTEGER1 –ge INTEGER2
當(dāng)INTEGER1大于或者等于INTEGER2時值為真
test INTEGER1 –gt INTEGER2
當(dāng)INTEGER1 大于INTEGER2時值為真
test INTEGER1 –le INTEGER2
當(dāng)INTEGER1小于等于INTEGER2時值為真
test INTEGER1 –lt INTEGER2
當(dāng)INTEGER1 小于INTEGER2時值為真
test INTEGER1 –ne INTEGER2
當(dāng)INTEGER1不等于INTEGER2時值為真
test FILE1 –ef FILE2
當(dāng)FILE1和FILE2有同樣的device和inode號時為真(詳細(xì)見linux文件學(xué)習(xí)筆記)
test FILE1 –nt FILE2
當(dāng)FILE1修改時間比FILE2新時值為真
test FILE1 –ot FILE2
當(dāng)FILE1修改時間比FILE2舊時值為真
test –b FILE
FILE存在并且內(nèi)容是block類型的
test –c FILE
FILE存在并且是字符類型的
test –d FILE
FILE存在并且是一個目錄
test –e FILE
FILE是否存在
test –f FILE
FILE存在并且是一個正則表達(dá)式類型的文檔
test –g FILE
FILE存在并且是 set-group-ID也就是SGID(詳細(xì)見后文學(xué)習(xí)筆記)
test –G FILE
FILE存在并且由有效的GROUP ID所擁有(詳細(xì)見后文學(xué)習(xí)筆記)
test –h FILE
FILE存在并且是一個符號鏈接(詳細(xì)見后文學(xué)習(xí)筆記)
test –k FILE
FILE存在并且設(shè)置了sticky bit set(詳細(xì)見后文學(xué)習(xí)筆記)
test –L FILE
FILE存在并且是一個符號鏈接
test –O FILE
FILE存在并且由一個有效的USER ID所擁有
test –p FILE
FILE存在并且是一個命名管道(命名管道見后文學(xué)習(xí)筆記)
test –r FILE
FILE存在并且授予了可讀的權(quán)限
test –s FILE
FILE存在并且size大于0
test –S FILE
FILE存在并且是一個socket
test –t FD
文件的描述符FD在終端打開
test –u FILE
FILE存在并且SUID已經(jīng)被設(shè)置
test –w FILE
FILE存在并且授予了寫操作權(quán)限
test –x FILE
FILE存在并且授予了可執(zhí)行的權(quán)限
----------------------------------------------------------------------------------------------------------------------------------------------------
expr
expr是linux的手工命令行計數(shù)器,它可以幫助我們完成一些基本的表達(dá)式值運算。同時它也是一個字符串處理工具
(1) 整數(shù)運算
$expr ARG1 | ARG2
$expr ARG1 ARG2
$expr ARG1 ARG2
$expr ARG1 = ARG2
$expr ARG1 = ARG2
$expr ARG1 != ARG2
$expr ARG1 = ARG2
$expr ARG1 ARG2
$expr ARG1 + ARG2
$expr ARG1 – ARG2
$expr ARG1 * ARG2
使用乘法時,需要使用反斜杠進(jìn)行轉(zhuǎn)義
$expr ARG1 % ARG2
(2) 字符串操作
$expr length “xxx” //計算字符串長度
$expr substr “this is a”pos length //從第pos位開始截取length長度的子串
$expr index “tesr”e //獲取e在主串中首次出現(xiàn)的位置
(3) 增量計數(shù)
例子
loop=3
loop=`expr $loop + 1`
echo $loop
結(jié)果是4,在第二行代碼中,使用反引號,shell會將反引號中的內(nèi)容作為一個系統(tǒng)命令,這樣一來,就好像我們在命令行內(nèi)輸入了expr $loop + 1然后這個命令的返回結(jié)果被賦值到loop。
(4) 模式匹配(按照正則表達(dá)式模式匹配串)
通過指定冒號選項計算字符串中字符數(shù)。.*意即任何字符重復(fù)0次或多次。
VALUE=account.doc
expr $VALUE : ’.*’
8
在expr中可以使用字符串匹配操作,這里使用模式抽取.doc文件附屬名。
$expr $VALUE : ‘\(.*\).doc’
accounts
(5) 其他
+ TOKEN
將TOKEN解釋為串,不管它是一個關(guān)鍵字或者一個操作符
延伸知識:
引號的作用
1 雙引號(“”)
1)使用””可引用除字符$(美元符號)、`(反引號)、\(反斜線)外的任意字符或字符串。雙引號不會阻止shell對這三個字符做特殊處理(標(biāo)示變量名、命令替換、反斜線轉(zhuǎn)義)。
Eg:name=gezn; echo “User name:$name”//將打印User name :gezn
Echo “The date is:`date +date-%d-%m-%Y`”//將打印The date is: 03-05-2009
Echo –e “$USER\t$UID” //將打印gezn 500
2)如果要查新包含空格的字符串經(jīng)常用到雙引號
2 單引號(’’)
1) 如果用單引號把字符串括起來,則dayi9nhao內(nèi)字符串中的任何特殊字符的特殊含義均被屏蔽。
2) 舉例:echo –e ‘$USER\t$UID’//將打印$USER $UID(沒有屏蔽\t,是因為選項“-e”的緣故)
echo ‘USER\t$UID’ //將打印$USER\t$UID
3 反引號(``)
1) shell將反引號中的內(nèi)容作為一個系統(tǒng)命令,并執(zhí)行其內(nèi)容。使用這種方法可以替換輸出為一個變量
2) 舉例:a=`date + date-%d-%m-%Y` //將打印The date is: 03-05-2009
4.反斜線(\)
1)如果下一個字符有特殊含義,反斜線防止shell誤解其含義,即屏蔽其特殊含義。
2)下屬字符包含有特殊含義: * + $ ` “ | ?
3) 在打印字符串時要加入八進(jìn)制字符(ASCII相應(yīng)字符)時,必須在前面加反斜線,否則shell作普通數(shù)字處。
舉例: bj=Beijing; echo ”variable\$bj=$bj”//將打印variable $bj = beijing
------------------------------------------------------------------------------------------------------------------------------------------------
Shell特殊變量
在Shell中,預(yù)先定義了幾個有特殊含義的Shell變量,它們的值只能由Shell根據(jù)實際情況進(jìn)行賦值,而不能通過用戶重新設(shè)置。shell的特殊變量包括它的位置和一些系統(tǒng)變量.
(一)常用位置變量:
$# 命令行上實際參數(shù)的個數(shù),但不包含Shell腳本名。
$? 上一條命令執(zhí)行后的返回值(也稱作 “退出碼”)。它是一個十進(jìn)制數(shù)。多數(shù)Shell命令執(zhí)行成功時,則返回值為0;如果執(zhí)行失敗,則返回非0值。
$$ 當(dāng)前進(jìn)程的進(jìn)程號。
$! 上一個后臺命令對應(yīng)的進(jìn)程號,這是一個由1~5位數(shù)字構(gòu)成的數(shù)字串。
$- 由當(dāng)前Shell設(shè)置的執(zhí)行標(biāo)志名組成的字符串。例如:
set -xv 這個命令行給Shell設(shè)置了標(biāo)志-x和-v(用于跟蹤輸出)。
$* 表示在命令行中實際給出的所有實參字符串,它并不僅限于9個實參。
$@ 它與$*基本功能相同,但是使用時加引號,并在引號中返回每個參數(shù)
$0 腳本名稱
$1..$9 第N個參數(shù)
下面的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 ,相當(dāng)于substr,計數(shù)從0開始
${aaa:3:2} 如上; ${aaa:3:2}取值為: de.相當(dāng)于substr
${#aaa} 字符串$aaa的長度.
(二)常用系統(tǒng)變量:
$HOME 用戶的主目錄
$USER 用戶名稱
$GROUP 用戶所屬組名
$PATH 默認(rèn)的搜索路徑
$HOSTNAME 主機(jī)名稱
$TZ 時區(qū)
$MAIL 存放郵件的路徑名
練手:
#!/bin/bash
echo $0
echo $*
echo $@
echo $#
echo $$
echo $_
在terminal窗口中執(zhí)行:
./test.sh -a -b –c /home
./test.sh
-a -b -c /home
-a -b -c /home
4
3250
/home
區(qū)別$*和$@編寫如下test.sh腳本:
#!/bin/bash
function testargs
{
echo "$# args"
}
testargs "$*"
testargs "$@"
unset -f testargs
在terminal窗口中執(zhí)行:
./test.sh -a -b /home
1 args //很明顯就一個嘛,傳入的是$*這個串,不是解釋后的參數(shù)
3 args //$@必須和引號搭配,所以結(jié)果正確
#!/bin/bash
function testargs
{
echo "$# args"
}
testargs $*
testargs $@
unset -f testargs
再次執(zhí)行有:
./test.sh -a -b /home
3 args
3 args
作者:Aga.J
出處:
使用系統(tǒng)函數(shù):
#includeunistd.h
int execvp(const char *file ,char * const argv []);
execvp()會從PATH 環(huán)境變量所指的目錄中查找符合參數(shù)file 的文件名(就是可執(zhí)行程序名,外部命令名),找到后便執(zhí)行該文件,然后將第二個參數(shù)argv傳給該欲執(zhí)行的文件(可執(zhí)行程序的參數(shù),或者說外部命令的參數(shù))。
Linux系統(tǒng)中的命令實在是太多了,簡單包括兩類命令,一類是內(nèi)部命令,指的是Shell自身提供的功能,一類是外部命令,指的是第三方的控制臺應(yīng)用程序。
一般來說,沒必要完全學(xué)習(xí)所有的命令,大體上有個印象,用到的時候去查一下幫助文檔,久而久之,自然熟練。
下面是網(wǎng)友整理的20個最常用的Linux命令:
1. ls命令
ls命令是列出目錄內(nèi)容(List Directory Contents)的意思。運行它就是列出文件夾里的內(nèi)容,可能是文件也可能是文件夾。
2. lsblk命令
"lsblk"就是列出塊設(shè)備。除了RAM外,以標(biāo)準(zhǔn)的樹狀輸出格式,整齊地顯示塊設(shè)備。
3. md5sum命令
“md5sum”就是計算和檢驗MD5信息簽名。md5 checksum(通常叫做哈希)使用匹配或者驗證文件的文件的完整性,因為文件可能因為傳輸錯誤,磁盤錯誤或者無惡意的干擾等原因而發(fā)生改變。
4. dd命令
“dd”命令代表了轉(zhuǎn)換和復(fù)制文件??梢杂脕磙D(zhuǎn)換和復(fù)制文件,大多數(shù)時間是用來復(fù)制iso文件(或任何其它文件)到一個usb設(shè)備(或任何其它地方)中去,所以可以用來制作USB啟動器。
6. history命令
“history”命令就是歷史記錄。它顯示了在終端中所執(zhí)行過的所有命令的歷史。
7. sudo命令
“sudo”(super user do)命令允許授權(quán)用戶執(zhí)行超級用戶或者其它用戶的命令。通過在sudoers列表的安全策略來指定。
8. mkdir命令
“mkdir”(Make directory)命令在命名路徑下創(chuàng)建新的目錄。然而如果目錄已經(jīng)存在了,那么它就會返回一個錯誤信息"不能創(chuàng)建文件夾,文件夾已經(jīng)存在了"("cannot create folder, folder already exists")
9. touch 命令
“touch”命令代表了將文件的訪問和修改時間更新為當(dāng)前時間。touch命令只會在文件不存在的時候才會創(chuàng)建它。如果文件已經(jīng)存在了,它會更新時間戳,但是并不會改變文件的內(nèi)容。
10. chmod 命令
“chmod”命令就是改變文件的模式位。chmod會根據(jù)要求的模式來改變每個所給的文件,文件夾,腳本等等的文件模式(權(quán)限)。
11. chown命令
“chown”命令就是改變文件擁有者和所在用戶組。每個文件都屬于一個用戶組和一個用戶。在你的目錄下,使用"ls -l",你就會看到像這樣的東西。
12. apt命令
Debian系列以“apt”命令為基礎(chǔ),“apt”代表了Advanced Package Tool。APT是一個為Debian系列系統(tǒng)(Ubuntu,Kubuntu等等)開發(fā)的高級包管理器,在Gnu/Linux系統(tǒng)上,它會為包自動地,智能地搜索,安裝,升級以及解決依賴。
13. tar命令
“tar”命令是磁帶歸檔(Tape Archive),對創(chuàng)建一些文件的的歸檔和它們的解壓很有用。
14. cal 命令
“cal”(Calender),它用來顯示當(dāng)前月份或者未來或者過去任何年份中的月份。
16. cat命令
“cat”代表了連結(jié)(Concatenation),連接兩個或者更多文本文件或者以標(biāo)準(zhǔn)輸出形式打印文件的內(nèi)容。
17. cp 命令
“copy”就是復(fù)制。它會從一個地方復(fù)制一個文件到另外一個地方。
18. mv 命令
“mv”命令將一個地方的文件移動到另外一個地方去。
19. pwd 命令
“pwd”(print working directory),在終端中顯示當(dāng)前工作目錄的全路徑。
20. cd 命令
最后,經(jīng)常使用的“cd”命令代表了改變目錄。它在終端中改變工作目錄來執(zhí)行,復(fù)制,移動,讀,寫等等操作。