shell腳本編程實現算術運算有:shell
+、-編程
*、/bash
模運算 %ide
乘方 ** 或 ^測試
特殊的加強型算術運算:進程
++ --字符串
算術運算方法it
1.let命令 VAR=算術表達式io
將算術表達式先行進行算術運算並將運算結果保存到變量VAR中class
2.VAR=$[算術表達式] []內若是引用變量,可使用$ 也能夠省略掉$
3.VAR=$((算術表達式)) 即把[]換成(())
4.expr ARG1 ARG2 ARG3
ARG1和ARG3必須是數值,ARG2必須是運算符
5.echo "算術表達式" | bc
注意:*在某些狀況下須要轉義
例如:統計/etc/fstab /etc/passwd /etc/issue三個文件中以字母r開頭的行數的總和
echo $[$(grep -c '^r' /etc/passwd)+$(grep -c '^r' /etc/passwd)]
條件測試命令:
1.test Expression
shell的內建命令
2.[ Expression ]
外部命令[ ;
3.` Expression `
bash的內部關鍵字;
注意 這類命令通常沒有執行結果,只有執行狀態返回值;用於邏輯判斷;
test測試命令有三類測試表達式
1.數值測試:雙目操做符
-eq :被測試的兩個數值是否相等,相等爲真,不等爲假
-ne :被測試的兩個數值是否不等,不等爲真,相等爲假
-gt :被測試的兩個數值,左是否大於右,大於爲真,不大於爲假
-lt :被測試的兩個數值,左是否小於右,小於爲真,不小於爲假
-ge :被測試的兩個數值,左是否大於等於右,大於等於爲真,小於爲假
-le :被測試的兩個數值,左是否小於等於右,小於等於爲真,大於爲假
例子:~/aaa 的大小是否小於1000字節
[ $(du a.c | awk '{print $1}') -lt 1000 ] && echo true || echo false
2.字符串測試
分爲雙目和單目
雙目操做符:
== :被測試的兩個字符串是否相同,相同爲真,不一樣爲假
!= :被測試的兩個字符串是否不相同,不一樣爲真,相同爲假
>: 被測試的兩個字符串在ASCII碼錶中對應的二進制數值,左是否大於右,大於爲真,小於爲假
<: 被測試的兩個字符串在ASCII碼錶中對應的二進制數值,左是否小於右,小於爲真,大於爲假
注意:> 和 < 必須用在` EXPR `的測試語句中
=~ :被測試的兩個字符串,左可否被右的PATTERN匹配,能匹配爲真,不能爲假;、
單目操做符:
-z 'STRING' : 判斷指定的字符串是否爲空串,空爲真,非空爲假
-n 'STRING' : 判斷指定的字符串是否爲非空串,非空爲真,空爲假
注意:
1.一般狀況下,字符串要加引號,根據實際狀況選擇單仍是雙引號
2.[[]]和[]在某些狀況下,可能意義不一樣,要區分使用
3.表達式兩端以及操做符兩端都要有空格
3.文件狀態測試
單目:
一、-a | -e :文件的存在性測試:若是被測試的文件存在爲真,不存在爲假
二、文件類型測試(先測試了存在性)
-b FILE : 被測試的文件是否存在而且是否爲塊設備;存在且爲塊設備爲真,不然爲假
-c FILE : 被測試的文件是否存在而且是否爲字符設備;...
-d FILE : 被測試的文件是否存在而且是否爲目錄文件;...
-f FILE : 被測試的文件是否存在而且是否爲普通文件;...
-h|-L FILE :被測試的文件是否存在而且是否爲符號鏈接文件;...
-p FILE : 被測試的文件是否存在而且是否爲管道文件;...
-S FILE : 被測試的文件是否存在而且是否爲套接字文件...
3.文件的訪問權限測試
-r FILE:被測試的文件是否存在而且當前有效用戶是否可讀,文件存在且當前有效用戶可讀爲真,不然爲假;
-w FILE:被測試的文件是否存在而且當前有效用戶是否可寫,文件存在且當前有效用戶可寫爲真,不然爲假;
-x FILE:被測試的文件是否存在而且當前有效用戶是否可執行,文件存在且當前有效用戶可執行爲真,不然爲假;
4.文件的特殊權限標識測試:
-u FILE:被測試的文件是否存在而且是否設置了SUID權限,文件存在且設置了SUID爲真,不然爲假;
-g FILE:被測試的文件是否存在而且是否設置了SGID權限,文件存在且設置了SGID爲真,不然爲假;
-k FILE:被測試的文件是否存在而且是否設置了STICKY權限,文件存在且設置了STICKY爲真,不然爲假;
5.文件的全部權測試:
-O FILE:被測試的文件是否存在而且其屬主是否爲當前有效用戶,文件存在且屬主爲當前用戶爲真,不然爲假;
-G FIle:被測試的文件是否存在而且其屬組是否爲當前有效用戶的組,文件存在且屬組爲當前用戶的組爲真,不然爲假;
6.文件內容是否爲空
-s FILE:被測試的文件是否存在而且內容不空,文件存在且內容不空爲真,不然爲假;
7.時間戳測試:
-N FILE:被測試的文件自從上一次被修改以後,是否被修改過,修改過爲真,不然爲假
雙目:
FILE1 -nt FILE2 True if file1 is newer than file2 (according to modification date).
FILE1 -ot FILE2 True if file1 is older than file2.
FILE1 -ef FILE2 True if file1 is a hard link to file2.
測試語句中能夠添加邏輯運算
第一種表達方式
例如[ -O /tmp/test ] && [ -s /tmp/test ] : 判斷/tmp/test 是否爲當前有效用戶全部且不爲空
第二種
[ -O /tmp/test -a -s /tmp/test ] 在這裏 -a 表示 &&
[ -O /tmp/test -o -s /tmp/test ] 在這裏 -o 表示 ||
[ ! -O /tmp/test ] 與 ! [ -O /tmp/test ] 結果相同,但!含義不一樣;也能夠寫做
命令的執行結果
正常的輸出結果
命令的執行狀態返回值
0-255
0:成功
1,2,127:系統保留的
3-126 128-255 :用戶自定義的返回值
exit [*]
退出當前shell的登陸
當shell腳本運行時,一旦遇到exit命令,將當即結束當前shell進程,同時腳本的運行也將被中止,即exit後面的全部命令都不會再被執行