您好,登錄后才能下訂單哦!
一、利用bash腳本編程實(shí)現(xiàn)算術(shù)運(yùn)算:
1)
+、-:加運(yùn)算
*、/
%:模運(yùn)算,取余數(shù)
**|^
2)增強(qiáng)型的算術(shù)運(yùn)算符號:
+= :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
3)特殊的增強(qiáng)型算術(shù)運(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的值賦給其他變量;
算術(shù)運(yùn)算方法:
1.let VAR=算術(shù)表達(dá)式
將算術(shù)表達(dá)式先行進(jìn)行算術(shù)運(yùn)算,并將運(yùn)算得到的結(jié)果保存到變量VAR中;
2.VAR=$[算術(shù)表達(dá)式]
算術(shù)表達(dá)式中如果有變量引用,可以使用$引用,也可以省略$;
SUM=$[C+B]相當(dāng)于SUM=$[$C+$B]
3.VAR=$((算術(shù)表達(dá)式))
算術(shù)表達(dá)式中如果有變量引用,可以使用$引用,也可以省略$;
4.expr ARGU1 ARGU2 ARGU3
ARGU1和ARGU3必須是數(shù)值;
ARGU2必須是運(yùn)算符號
5.echo “算是表達(dá)式” | bc
注意:*號,在某些情況下,需要轉(zhuǎn)義;
變量:存儲數(shù)據(jù)的容器
弱變量:弱類型變量,字符型(默認(rèn)),數(shù)值型(不包括浮點(diǎn)型)
二、條件測試命令:
test EXPRESSION
shell內(nèi)建命令;
[ EXPRESSION ]
外部命令[ ;
` EXPRESSION `
bash的內(nèi)部關(guān)鍵字;
/////注意:這類命令一般沒有執(zhí)行結(jié)果,只有執(zhí)行狀態(tài)返回值;test一般有兩種格式,使用方括號時,要注意在條件兩邊加上空格:
test測試命令有三類測試表達(dá)式:
1.數(shù)值測試:雙目操作符
-eq :被測試的兩個數(shù)值是否相等,相等為真,不等為假;
-ne :被測試的兩個數(shù)值是否不相等,不等為真,相等為假;
-gt :被測試的兩個數(shù)值,左邊的是否大于右邊的,大于為真,不大于為假;
-lt :被測試的兩個數(shù)值,左邊的是否小于右邊的,小于為真,不小于為假;
-ge :被測試的兩個數(shù)值,左邊的是否大于等于右邊的,大于等于為真,小于為假;
-le :被測試的兩個數(shù)值,左邊的是否小于等于右邊的,小于等于為真,大于為假;
例子:~/aaa的大小是否小于1000字節(jié);
[root@mylab1 ~]# [ $(ls -l aaa | awk '{print $5}') -lt 1000 ] && echo OK || echo "bu OK"
OK
2.字符串測試
1)雙目操作符:
==|= :被測試的兩個字符串是否相同,相同為真,不同為假;
!= :被測試的兩個字符串是否不相同,不同為真,相同為假;
> :被測試的兩個字符串在ASCII碼表中對應(yīng)的二進(jìn)制數(shù)值,左邊是否大于右邊,大于為真,小于為假;
< :被測試的兩個字符串在ASCII碼表中對應(yīng)的二進(jìn)制數(shù)值,左邊是否小于右邊,小于為真,大于為假;
注意:>和<必須用在` EXPRESSION `測試語句中;
=~ :被測試的兩個字符串,左側(cè)字符串能否被右側(cè)的PATTERN匹配,能匹配為真,不能匹配為假;
單目操作符:
-z 'STRING':判斷指定的字符串是否為空串,空為真,不空為假;
-n 'STRING':判斷指定的字符串是否為非空串,非空為真,空為假;
注意:
1.通常情況下,字符串要加引號,單引號或雙引號都行,根據(jù)實(shí)際情況選擇即可;
2.[[]]和[]在某些情況下,可能意義不同,要區(qū)分使用;
3.表達(dá)式兩端以及操作符兩端都要有空格;
3.文件狀態(tài)測試
單目測試:
文件的存在性測試:如果被測試的文件存在為真,不存在則為假;
-a | -e
[ -e /backup ]
文件類型測試(先測試存在性):
-b FILE:被測試的文件是否存在并且是否為塊設(shè)備;存在且為塊設(shè)備為真,否則為假;
-c FILE:被測試的文件是否存在并且是否為字符設(shè)備;
-d FILE:被測試的文件是否存在并且是否為目錄文件;
-f FILE:被測試的文件是否存在并且是否為普通文件;
-h|-L FILE:被測試的文件是否存在并且是否為符號鏈接文件;
-p FILE:被測試的文件是否存在并且是否為管道文件;
-S FILE:被測試的文件是否存在并且是否為套接字文件;
文件的訪問權(quán)限測試:
-r FILE:被測試的文件是否存在并且當(dāng)前有效用戶是否可讀;文件存在并且當(dāng)前有效用戶可讀為真,否則為假;
-w FILE:被測試的文件是否存在并且當(dāng)前有效用戶是否可寫;
-x FILE:被測試的文件是否存在并且當(dāng)前有效用戶是否可執(zhí)行;
文件的特殊權(quán)限標(biāo)識測試:
-u FILE:被測試的文件是否存在并且是否設(shè)置了SUID權(quán)限;文件存在并且設(shè)置了SUID權(quán)限為真,否則為假;
-g FILE:被測試的文件是否存在并且是否設(shè)置了SGID權(quán)限;
-k FILE:被測試的文件是否存在并且是否設(shè)置了STICKY權(quán)限;
文件的所有權(quán)測試:
-O FILE:被測試的文件是否存在并且其屬主是否為當(dāng)前有效用戶;
-G FILE:被測試的文件是否存在并且其屬組是否為當(dāng)前有效用戶的組;
文件內(nèi)容是否為空:
-s FILE:被測試的文件是否存在且內(nèi)容不為空,存在且內(nèi)容不空為真,否則為假;
時間戳測試:
-N FILE:被測試的文件自從上一次被修改之后,是否被修改過;
雙目測試:
FILE1 -ef FILE2:測試兩個文件是否指向同一個文件系統(tǒng)的相同inode的硬鏈接;
FILE1 -nt FILE2;被測試的兩個文件,F(xiàn)ILE1是否比FILE2更新;
FILE1 -ot FILE2:被測試的兩個文件,F(xiàn)ILE1是否比FILE2更舊;
測試語句中可以添加邏輯運(yùn)算:
第一種表達(dá)方式:
[ -O /tmp/test ] && [ -s /tmp/test ]
[ -O /tmp/test ] || [ -s /tmp/test ]
! [ -O /tmp/test ]
第二中表達(dá)方式:
[ -O /tmp/test -a -s /tmp/test ]
[ -O /tmp/test -o -s /tmp/test ]
[ ! -O /tmp/test ]
命令的執(zhí)行結(jié)果:
正常的輸出結(jié)果
命令的執(zhí)行狀態(tài)返回值:
0-255
0:表示命令執(zhí)行成功
1,2,127:系統(tǒng)保留的;
3-126,128-255:用戶自定義的執(zhí)行狀態(tài)返回值;
exit [#]
退出當(dāng)前shell的登錄。
當(dāng)shell腳本運(yùn)行時,一旦遇到exit命令,將立即結(jié)束當(dāng)前shell進(jìn)程,同時腳本的運(yùn)行也將被停止,即exit后面的所有命令都不再被解釋執(zhí)行;
博客:grep、egrep及相應(yīng)的正則表達(dá)式和用法;講明白每一個元字符的意義,并舉例說明;
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。