利用bash腳本編程實現算數運算:
+:
-:
*:
\:
%:模運算,取餘數
**:乘方 ^
加強型的算術運算符號:
+=:let B=B+2 -->let B+=2
-=:
*=:
/=:
%=:
特殊的加強型的算術運算:
1.let B=B+1 -->let B+=1 -->let B++
B++:先將B的值賦給其餘變量,而後再自身加一;
++B:先將自身加一,而後再將值賦給其餘變量;
node
#A=4shell
#let A++編程
#echo $Abash
5ide
#let SUM=2+3測試
#echo $SUMspa
5進程
#echo "the sum of 2+3 is `expr 2+3`"字符串
2.VAR+$[算術表達式]
算術表達式中若是有變量引用,可使用$引用,也能夠省略$it
#SUM=$[2+3]
#echo $SUM
5
#DAYS=$[$(`date +%s`)/24/60/60]
15602 (計算從1970年1月1日到如今經歷的整數天)
。
#SUM=$[$A+$B]
3.VAR=$((算術表達式))
算術表達式中若是有變量引用,可使用$引用,也能夠省略$
#SUM=$((3/2))
#echo $SUM
1 (bash只進行整數運算,小數部分被忽略)
#SUM=(($A+$B))
4.expr ARGU1 ARGU2 ARGU3
ARGU1和ARGU3必須是數值;
ARGU2必須是運算符號;
5.echo "算術表達式" | bc
注意:*號,在某些狀況下須要轉義
例子:
統計/etc/fstab
算術運算方法:
1.let VAR=算術表達式
將算術表達式先行進行算術運算,並將算術獲得的結果保存到變量VAR中;
變量:存儲數據的一個容器
弱變量:弱類型變量,字符型(默認),數值型(不包括浮點型)
條件測試命令:
test EXPERSSION
shell內建命令:
[ eEXPERSSION ]
外部命令[ :
` EXPERSSION`
bash的內部關鍵字:
注意:這類命令通常沒有執行結果,只有執行狀態返回值;
test測試命令有三類測試表達式:
1.數值測試
-eq:被測試的兩個數值是否相等,相等爲真,不等爲假;
-ne:被測試的兩個數值是不相等,相等爲假,不等爲真;
-gt:被測試的兩個數值,左面的是否大於右面的,大於爲真,不大於爲假;
-lt:被測試的兩個數值,左面的是否小於右面的,小於爲真,不小於爲假;
-ge: 被測試的兩個數值,左面的是否大於等於右面的,大於等於爲真,小於爲假;
-le:被測試的兩個數值,左面的是否小於等於右面的,小於等於爲真,大於爲假;
2.字符串測試
雙目操做符:
==:被測試的兩個字符串是否相同,相同爲真,不相同爲假;
!=:被測試的兩個字符串是否相同,不相同爲真,相同爲假;
>:被測試的兩個字符串在ASCII碼錶中對應的二進制數值左邊是否大於右邊,大於爲真,小於爲假;
<:被測試的兩個字符串在ASCII碼錶中對應的二進制數值左邊是否小於右邊,小於爲真,大於爲假;
注意:<和>必須用在` EXPERSSION`的測試語句中;
=~:被測試的兩個字符串左邊字符串是否能被右邊的PATTERN匹配,能匹配爲真,不能匹配爲假;
單目操做符:
-z 'STEING':判斷指定的字符串是否爲空串,空爲真,不空爲假;
-n 'STEING':判斷指定的字符串是否爲非空串,非空爲真,空爲假;
注意:
1.一般狀況下,字符串要加引號,單引號或雙引號都行,根據實際狀況選擇便可;
2.[[]]和[]在某些狀況下可能意義不一樣,要區分使用;
3.表達式的兩端以及操做符的兩端都要加空格;
3.文件狀態測試
文件的存在性測試:若是被測試的文件存在,爲真,不存在,爲假;
-a | -e :
[ -e /etc ]
文件類型測試(先測試存在性):
-b FILE:被測試的文件是否存在而且是否爲塊設備;存在且爲真,不然爲假;
-c FILE: 被測試的文件是否存在而且是否爲字符設備;...
-d FILE: 被測試的文件是否存在而且是否爲目錄文件;...
-f FILE:被測試的文件是否存在而且是否爲普通文件;...
-h | -L FILE:被測試的文件是否存在而且是否爲符號連接文件;...
-p FILE:被測試的文件是否存在而且是否爲管道文件;...
-S FILE:被測試的文件是否存在而且是否爲套接字文件;...
文件的訪問權限設置:
-r FILE:被測試的文件是否存在而且當前有效用戶是否可讀;文件存在而且可讀爲真,不然爲假;
-w FILE:被測試的文件是否存在而且當前有效用戶是否可寫;...
-x FILE:被測試的文件是否存在而且當前有效用戶是否可執行;...
文件的特殊權限標識測試:
-u FILE:被測試的文件是否存在而且是否設置了SUID權限,文件存在而且設置了SUID權限爲真,不然爲假;
-g FILE:被測試的文件是否存在而且是否設置了SGID權限;
-k FILE:被測試的文件是否存在而且是否設置了STICKY權限;
文件的全部權測試:
-O FILE:被測試的文件是否存在且屬主是否爲當前有效用戶,
-G FILE:被測試的文件是否存在且屬組是否爲當前有效用戶的組,
文件是否爲空:
-s FILE:被測試的文件是否存在且內容不空,不空爲真,不然爲假;
時間戳測試:
-N FILE:被測試的文件自從上一次被修改以後,是否被修改過;
雙目測試:
FILE -ef FILE2:被測試的兩個文件是指向同一個文件系統的相同inode的硬連接;
FILE -nt FILE2:被測試的兩個文件FILE1是否比FILE2更新;
FILE -ot FILE2:被測試的兩個文件FILE1是否比FILE2更舊;
測試語句中能夠添加邏輯運算:
第一種表達方式:
[ -o /tmp/test ] && [ -s /tmp/test ]
[ -o /tmp/test ] || [ -s /tmp/test ]
第二種表達方式:
[ -o /tmp/test -a -s /tmp/test ]
[ -o /tmp/test -o -s /tmp/test ]
命令的執行結果:
正常的輸出結果:
命令的執行狀態返回值:
0-255
0:
1,2,127:系統保留的
3-126,128-255:用戶自定義的執行狀態返回值
exit [#]
退出當前shell的登錄;
當shell腳本運行是,一旦遇到exit命令,將當即結束當前shell進程,同時腳本的運行也將被中止,即exit後面的全部命令再也不被解釋執行;
shell腳本編程: shell腳本的內容和格式: 首行必需要佔據絕對行首,shebang(解釋器程序的絕對路徑) 註釋信息:以#佔據絕對行首的行;增長源代碼的可讀性 爲了可以在程序中突出程序的功能,適當的添加空白行,以分隔不一樣功能的源代碼塊; 有必定的縮進