Linux shell腳本編程總結(一、運算符)

Shell 既是一種命令語言,又是一種程序設計語言。作爲命令語言,它交互式地解釋和執行用戶輸入的命令;作爲程序設計語言,它定義了各種變量和參數,並提供了許多在高級語言中才具有的控制結構,包括循環和分支。

Unix/Linux 上常見的 Shell 腳本解釋器有 bash、sh、csh、ksh 等,bash 是 Linux 標準默認的 shell,本文的shell程序都基bash 運行。

在本文中,將會介紹shell腳本的運算符、字符串操作、條件語句、循環語句、正則表達式等。
1.運算符

原生 bash 不支持簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr,expr最常用。

(1)算數運算符,看例子

#!/bin/bash
a=4
b=3
#加法運算
A=`expr $a + $b`        
echo "A = $A"

#減法運算
A=`expr $a - $b`        
echo "A = $A"

#乘法運算需要對*轉義
A=`expr $a \* $b`        
echo "A = $A"

#除法運算  
A=`expr $a / $b`         
echo "A = $A"

#取餘運算
A=`expr $a % $b`        
echo "A = $A"

注意:

1.表達式和運算符之間要有空格,例如 2+2 是不對的,必須寫成 2 + 2。

2.完整的表達式要被 ` ` 包含,注意這個字符不是常用的單引號,在 Esc 鍵下邊。

(2)關係運算符

關係運算符只支持數字,看例子

#!/bin/bash
a=4
b=3
 #-eq,檢測兩個數是否相等,相等返回true
if [ $a -eq $b ]            
then
    echo "$a = $b"
else
    echo "$a != $b"
fi  

 #-ne,檢測兩個數是否相等,不相等返回true
if [ $a -ne $b ] 
then
    echo "$a != $b"
else
    echo "$a = $b"
fi  

#-gt,檢測左邊的數是否大於右邊,如果是,返回true
if [ $a -gt $b ] 
then
    echo "$a > $b"
else
    echo "$a < $b"
fi 

#-lt,檢測左邊的數是否小於右邊,如果是,返回true
if [ $a -lt $b ] 
then
    echo "$a < $b"
else
    echo "$a > $b"
fi  

#-ge,檢測左邊的數是否大於等於右邊,如果是,返回true
if [ $a -ge $b ] 
then
    echo "$a >= $b"
else
    echo "$a < $b"
fi  

#-le,檢測左邊的數是否小於等於右邊,如果是,返回true
if [ $a -le $b ] 
then
    echo "$a <= $b"
else
    echo "$a > $b"
fi   

另外判斷兩個數字是否相等,還可以用==和!=,如

#!/bin/bash
a=4
b=3
if [ $a == $b ]
then
    echo "$a == $b"
else
    echo "$a != $b"
fi

if [ $a == $b ]
then
    echo "$a != $b"
else
    echo "$a == $b"
fi


注意:條件表達式要放在方括號之間,並且要有空格,例如 [$a==$b] 是錯誤的,必須寫成 [ $a == $b ]
另外還有布爾運算符、文件測試運算符、字符串運算符等。這裏大概說一下,詳細的教材大把,就不一一抄書了。

(3)布爾運算符

非運算,表達式爲true則返回false,否則返回true 類似C語言的 ! 運算符
-o 或運算,有一個表達式爲true則返回true  類似C語言的 || 運算符
-a 與運算,兩個表達式都爲true才返回true 類似C語言的 && 運算符

(4)字符串運算符

= 檢測兩個字符串是否相等,相等返回true if [ $a = $b ] 
!= 檢測兩個字符串是否相等,不相等返回true if [ $a != $b ]
-n 檢測字符串長度是否爲0,不爲0返回true if [ -n $a ]
-z 檢測字符串長度是否爲0,爲0返回true if [ -z $a ]
str 檢測字符串是否爲空,不爲空返回true if [ $str ]

注意:

判斷字符串相等(=)和判斷數字相等(==)的運算符是不一樣的

(4)文件測試運算符

-b 檢測文件是否是塊設備文件,如果是則返回true if [ -b $file ]
-c 檢測文件是否是字符設備文件,如果是則返回true if [ -c $file ]
-d 檢測文件是否是目錄,如果是則返回true if [ -d $file ]
-f 檢測文件是否是普通文件(不是目錄也不是設備文件),如果是則返回true if [ -f $file ]
-g 檢測文件是否設置了SGID位,如果設置了返回true if [ -g $file ]
-k 檢測文件是否設置粘着位(sticky bit),如果設置了返回true if [ -k $file ]
-p 檢測文件是否是具名管道,如果是則返回true if [ -p $file ]
-u 檢測文件是否設置了SUID位,如果設置了返回true if [ -u $file ]
-w 檢測文件是否可寫,如果可寫返回true if [ -w $file ]
-x 檢測文件是否可執行,如果可執行返回true if [ -x $file ]
-s 檢測文件是否爲空,如果不爲空返回true if [ -s $file ]
-e 檢測文件是否存在,如果存在返回true if [ -e $file ]

 本文參考了某些書籍,如有侵權請聯繫博主刪除。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章