首先我們要了解腳本的內(nèi)容和格式
成都創(chuàng)新互聯(lián)長(zhǎng)期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為郫都企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),郫都網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
首行必須是shebang(解釋器路徑),shebang必須占據(jù)絕對(duì)行首
在shell腳本中,除了shebang之外,以#占據(jù)據(jù)對(duì)行首的內(nèi)容,均為注釋行,解釋器會(huì)自動(dòng)忽略這樣的行內(nèi)容
為了能在程序中突出程序的功能,適當(dāng)?shù)奶砑涌瞻仔校苑指舨煌脑创a塊
有一定的縮進(jìn)
利用bash腳本編程實(shí)現(xiàn)算術(shù)運(yùn)算:
+、-
*、/
%:模運(yùn)算,取余數(shù)
**|^
增強(qiáng)型的算數(shù)運(yùn)算符號(hào)
+=: let B=B+2-->let B+=2
-= let B=B+2-->let B-=2
*= let B=B+2-->let B*=2
/= let B=B+2-->let B/=2
%= let B=B+2-->let B%=2
特殊的增強(qiáng)型運(yùn)算:
let B=B+1 -->let B+=1 -->let B++
let B=B-1 -->let B-=1 -->let B--
B++: 先將B的值賦給其他變量,然后再自身+1
++B:先做自身+1計(jì)算,然后再將B的值賦給其他變量
shell提供的算數(shù)運(yùn)算方法
1.let:let VAR=算數(shù)表達(dá)式
將算數(shù)表達(dá)式先行進(jìn)行算數(shù)運(yùn)算,并將運(yùn)算的道德結(jié)果保存到變量VAR中
2.VAR=$[算數(shù)表達(dá)式]
算數(shù)表達(dá)式中,如果有變量引用,可以使用$引用,也可以省略$
3.VAR=$((算數(shù)表達(dá)式))
算數(shù)表達(dá)式中,如果有變量引用,可以使用$引用,也可以省略$
4.expr ARGU1 ARGU2 ARGU3
ARGU1和ARGU3必須是數(shù)值,ARGU2必須是運(yùn)算符號(hào)
5.echo "算數(shù)表達(dá)式" | bc
注意:*在某些情況下需要轉(zhuǎn)義
條件測(cè)試命令
test EXPRESSION
shell的內(nèi)建命令
[ EXPRESSION ]
外部命令[
`EXPRESSION`
bash的內(nèi)部關(guān)鍵字
注意:這類命令一般沒(méi)有執(zhí)行結(jié)果只有執(zhí)行狀態(tài)返回值;
這里說(shuō)一下test測(cè)試命令的測(cè)試表達(dá)式
test測(cè)試命令有三類測(cè)試表達(dá)式:
1.數(shù)值測(cè)試:雙目操作符
-eq: 被測(cè)試的兩個(gè)數(shù)值是否相等,相等為真,不等為假
-ne:被測(cè)試的兩個(gè)數(shù)值是否不相等,不等為真,相等為假
-gt:被測(cè)試的兩個(gè)數(shù)值,左邊的是否大于右邊的,大于為真,不大于為假
-lt:被測(cè)試的兩個(gè)數(shù)值,左邊的是否小于右邊的,小于為真,不小于為假
-ge:被測(cè)試的兩個(gè)數(shù)值,左邊的是否大于等于右邊的,大于等于為真,小于為假
-le:被測(cè)試的兩個(gè)數(shù)值,左邊的是否小于等于右邊的,小于等于為真,大于為假
2.字符串測(cè)試
雙目操作符:
==|=:被測(cè)試的兩個(gè)字符串是否相同,相同為真,不同為假
!=:被測(cè)試的兩個(gè)字符串是否不相同,不同為真,相同為假
>: 被測(cè)試的兩個(gè)字符串在ASCII碼表中對(duì)應(yīng)的二進(jìn)制數(shù)值,左邊是否大于右邊,大于為真,小于為假
<: 被測(cè)試的兩個(gè)字符串在ASCII碼表中對(duì)應(yīng)的二進(jìn)制數(shù)值,左邊是否小于右邊,小于為真,大于為假
注意:>和<必須用在` EXPRSSION `
=~:被測(cè)試的兩個(gè)字符串,左側(cè)字符串能否被右側(cè)的PATTERN匹配,如果能匹配則為真,不能匹配為假
單目操作符
-z 'STRING':判斷指定的字符串是否為空串,空為真,不空為假;
-n 'STRING':判斷指定的字符串是否為非空字符串,非空為真,空為假;
注意:1.通常情況下,字符串要加引號(hào),單引號(hào)雙引號(hào)都可以,根據(jù)實(shí)際情況選擇即可
2.[[]]和[]在某些情況下可能意義不同,要區(qū)分使用,
3.表達(dá)式兩端以及操作符兩端都要有空格
3.文件狀態(tài)測(cè)試
單目測(cè)試
文件的存在性測(cè)試:如果被測(cè)試的文件存在為真,不存在為假
-a|-e [ -e /backup]
文件類型測(cè)試:(先測(cè)試存在性)
-b FILE:被測(cè)試的文件是否存在并且是否為塊設(shè)備;存在且為塊設(shè)備為真,否則為假
-c FILE:被測(cè)試的文件是否存在并且是否為字符設(shè)備;
-d FILE:被測(cè)試的文件是否存在并且是否為目錄文件;
-f FILE:被測(cè)試的文件是否存在并且是否為普通文件;
-h|-L FILE :被測(cè)試的文件是否存在并且是否為符號(hào)鏈接文件;
-p FILE: 被測(cè)試的文件是否存在并且是否為管道文件;
-S FILE: 被測(cè)試的文件是否存在并且是否為套接字文件;
文件的訪問(wèn)權(quán)限測(cè)試:
-r FILE:被測(cè)試的文件是否存在并且當(dāng)前有效用戶可讀,文件存在且當(dāng)前有效用戶可讀為真,否則為假
-w FILE:被測(cè)試的文件是否存在并且當(dāng)前有效用戶可寫(xiě)
-x FILE:被測(cè)試的文件是否存在并且當(dāng)前有效用戶課執(zhí)行
文件的特殊權(quán)限標(biāo)識(shí)測(cè)試
-u FILE:被測(cè)試的文件是否存在并且設(shè)置了SUID權(quán)限,文件存在并且設(shè)置了SUID權(quán)限為真,否則為假
-g FILE:被測(cè)試的文件是否存在并且設(shè)置了SGID權(quán)限
-k FILE:被測(cè)試的文件是否存在并且設(shè)置了 STICKY權(quán)限
文件的所有權(quán)測(cè)試:
-O FILE:被測(cè)試的文件是否存在并且其屬主是否為當(dāng)前有效用戶,
-G FILE:被測(cè)試的文件是否存在并且其屬組是否為當(dāng)前有效用戶的組,
文件內(nèi)容是否為空:
-s FILE: 被測(cè)試的文件是否存在且內(nèi)容不空,存在且內(nèi)容不空為真,否則為假
時(shí)間戳測(cè)試:
-N FILE:被測(cè)試的文件自從上一次被修改之后,是否被修改過(guò),沒(méi)被修改為真,修改為假
雙目測(cè)試:
FILE1 -ef FILE2: 測(cè)試兩個(gè)文件是否指向同一個(gè)文件系統(tǒng)的相同iNode硬鏈接
FILE1 -nt FILE2: 被測(cè)試的兩個(gè)文件,file1是否比FILE2更新
FILE1 -ot FILE2: 被測(cè)試的兩個(gè)文件,file1是否比FILE2更舊
測(cè)試語(yǔ)句中可以添加邏輯運(yùn)算
[ -O /tmp/test -a -s /tmp/test ] 與 o是或 !取反
命令的執(zhí)行狀態(tài):
正常的輸出結(jié)果:
命令的執(zhí)行狀態(tài)返回值:
0~255
當(dāng)shell腳本運(yùn)行時(shí),一旦遇到exit命令,將立即結(jié)束當(dāng)前shell,同時(shí)腳本的運(yùn)行也將被停止,即exit之后的命令都不在被解釋執(zhí)行;