shell基本運算符

Shell運算符:bash

  算數運算符app

       關係運算符socket

       布爾運算符測試

       字符串運算符spa

       文本測試運算符blog

算數運算符ci

原生bash不支持簡單的數學運算符,可是能夠經過其它命令來實現。例如:awk 和 expr,其中expr最經常使用字符串

運算符 說明 舉例
+ 加法 `expr $a + $b` 結果爲 30。
- 減法 `expr $a - $b` 結果爲 -10。
* 乘法 `expr $a \* $b` 結果爲  200。
/ 除法 `expr $b / $a` 結果爲 2。
% 取餘 `expr $b % $a` 結果爲 0。
= 賦值 a=$b 將把變量 b 的值賦給 a。
== 相等。用於比較兩個數字,相同則返回 true。 [ $a == $b ] 返回 false。
!= 不相等。用於比較兩個數字,不相同則返回 true。
  • [ $a != $b ] 返回 true。

 

 

 

 

 

 

 

 

#!/bin/bash
#簡單算數運算符
a=100
b=10
echo "a = $a , b = $b"
c=`expr $a + $b`
echo "a + b is value :$c"
c=`expr $a - $b`
echo "a -b is value : $c"
c=`expr $a \* $b`
echo "a * b is value : $c"
c=`expr $a / $b`
echo "a / b is value :$c"
c=`expr $a % $b`
echo "a % b is value: $c"
if [ $a == $b ]
then
echo "a == b : true"
else
echo "a == b : false"
fi
if [ $a != $b ]
then
echo "a != b :true"
else
echo "a != b : false"
fi

  

 輸出結果:數學

a = 100 , b = 10
a + b is value :110
a -b is value : 90
a * b is value : 1000
a / b is value :10
a % b is value: 0
a == b : false
a != b :true

關係運算符

關係運算符只支持數字,不支持字符串,除非字符串的值是數字。it

下表列出了經常使用的關係運算符,假定變量 a 爲 10,變量 b 爲 20:

運算符 說明 舉例
-eq 檢測兩個數是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
-ne 檢測兩個數是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 檢測左邊的數是否大於右邊的,若是是,則返回 true。 [ $a -gt $b ] 返回 false。
-lt 檢測左邊的數是否小於右邊的,若是是,則返回 true。 [ $a -lt $b ] 返回 true。
-ge 檢測左邊的數是否大於等於右邊的,若是是,則返回 true。 [ $a -ge $b ] 返回 false。
-le 檢測左邊的數是否小於等於右邊的,若是是,則返回 true。 [ $a -le $b ] 返回 true。

 

 

 

 

 

 


 

#!/bin/bash
#關係運算符
a=10
b=20
echo "-eq ,檢測兩個數是否相等"
if [ $a -eq $b ]
then
 echo "a 等於 b"
else
 echo a 不等於 b
fi

echo "-ne 檢測兩個數是否不相等"

if [ $a -ne $b ]
then
    echo  a不等於b
fi

echo "-gt 檢測左邊是否大於右邊"

if [ $a -gt $b ]
then
  echo a大於b,-gt返回ture
fi

echo "-lt檢測左邊是否小於右邊"
if [ $a -lt $b ]
then
    echo a小於b,-lt返回true
fi

echo -ge 左邊大於等於右邊

if [ $a -ge $b ]
then
    echo a大於等於b
fi

echo -le 左邊小於等於右邊

if [ $a -le $b ]
then
     echo "a 小於等於 b"
fi

  

輸出:
-eq ,檢測兩個數是否相等
a 不等於 b
-ne 檢測兩個數是否不相等
a不等於b
-gt 檢測左邊是否大於右邊
-lt檢測左邊是否小於右邊
a小於b,-lt返回true
-ge 左邊大於等於右邊
-le 左邊小於等於右邊
a 小於等於 b

  

運算符 說明 舉例
! 非運算,表達式爲 true 則返回 false,不然返回 true。 [ ! false ] 返回 true。
-o 或運算,有一個表達式爲 true 則返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 與運算,兩個表達式都爲 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false

 

 

 

 

運算符 說明 舉例
&& 邏輯的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 邏輯的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true

 

 

 

#!/bin/bash
#布爾運算, !非運算  -o 或運算 -a 與運算
a=10
b=20
if [ $a != $b ]
then
   echo "$a != $b :a不等於b"
else
   echo "$a == $b : a等於b"
fi
if [ $a -lt 100 -a $b -lt 20 ]
then
   echo "$a 小於100 且 $b 小於 20 :返回true"
else
   echo "$a 小於100 且 $b 小於20 :返回false"
fi
if [ $a -lt 20 -o $b -gt 100 ]
then      
  echo "$a 小於20 或 $b 大於100 :返回ture"
else      
  echo "$a 小於20 或 $b 大於100 ;返回false"
fi      
if [[ $a -lt 100 && $b -lt 10 ]]
then         
  echo "$a 小於100 而且 $b 小於10:返回true"
else
  echo "$a 小於 100 而且 $b 小於 10 :返回false"
fi  
if [[ $a -lt 100 || $b -lt 10 ]] 
then
  echo "$a 小於 100 或者 $b 小於 10 ; 返回 ture"
else
 echo "$a 小於100 或者 $b 小於10 :返回false" 
fi  

  

10 != 20 :a不等於b
10 小於100 且 20 小於20 :返回false
10 小於20 或 20 大於100 :返回ture
10 小於 100 而且 20 小於 10 :返回false
10 小於 100 或者 20 小於 10 ; 返回 ture

字符串運算符

下表列出了經常使用的字符串運算符,假定變量 a 爲 "abc",變量 b 爲 "efg":

運算符 說明 舉例
= 檢測兩個字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 檢測兩個字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 檢測字符串長度是否爲0,爲0返回 true。 [ -z $a ] 返回 false。
-n 檢測字符串長度是否爲0,不爲0返回 true。 [ -n "$a" ] 返回 true。
$ 檢測字符串是否爲空,不爲空返回 true。 [ $a ] 返回 true。

  

 

 

 

 

 

#!/bin/bash
#字符串運算符
a="apple"
b="banana"
if [ $a = $b ]
then
   echo "$a = $b :a 等於 b"
else
  echo "$a = $b: a不等於 b"
fi
b="apple"
if [ $a != $b ]
then
  echo "$a != $b : a不等於b"
else
 echo "$a != $b: a等於b"
fi
#-z判斷字符串長度是否爲0,爲0返回true,不爲0返回fasle
if [ -z $a ]
then      
   echo "-z $a :字符串長度爲0" 
else    
   echo "-z $a:字符串長度不爲0"
fi           
#-n檢測字符串長度是否爲0 不爲0返回ture
if [ -n $b ]
then
   echo "-n $b :字符串長度不爲0" 
else
   echo "-n $b :字符串長度爲0"
fi  
# $ 檢測字符串是否爲空,不爲空返回true 
if [ $a ]
then
   echo "$a:字符串不爲空"
else 
  echo "$a :字符串爲空"
fi

  輸出:

apple = banana: a不等於 b
apple != apple: a等於b
-z apple:字符串長度不爲0
-n apple :字符串長度不爲0
apple:字符串不爲空

  

文件測試運算符

文件測試運算符用於檢測 Unix 文件的各類屬性。

屬性檢測描述以下:

操做符 說明 舉例
-b file 檢測文件是不是塊設備文件,若是是,則返回 true。 [ -b $file ] 返回 false。
-c file 檢測文件是不是字符設備文件,若是是,則返回 true。 [ -c $file ] 返回 false。
-d file 檢測文件是不是目錄,若是是,則返回 true。 [ -d $file ] 返回 false。
-f file 檢測文件是不是普通文件(既不是目錄,也不是設備文件),若是是,則返回 true。 [ -f $file ] 返回 true。
-g file 檢測文件是否設置了 SGID 位,若是是,則返回 true。 [ -g $file ] 返回 false。
-k file 檢測文件是否設置了粘着位(Sticky Bit),若是是,則返回 true。 [ -k $file ] 返回 false。
-p file 檢測文件是不是有名管道,若是是,則返回 true。 [ -p $file ] 返回 false。
-u file 檢測文件是否設置了 SUID 位,若是是,則返回 true。 [ -u $file ] 返回 false。
-r file 檢測文件是否可讀,若是是,則返回 true。 [ -r $file ] 返回 true。
-w file 檢測文件是否可寫,若是是,則返回 true。 [ -w $file ] 返回 true。
-x file 檢測文件是否可執行,若是是,則返回 true。 [ -x $file ] 返回 true。
-s file 檢測文件是否爲空(文件大小是否大於0),不爲空返回 true。 [ -s $file ] 返回 true。
-e file 檢測文件(包括目錄)是否存在,若是是,則返回 true。 [ -e $file ] 返回 true。

 

 

 

 

 

 

 

 

 

 

 

其餘檢查符:

  • -S: 判斷某文件是否 socket。
  • -L: 檢測文件是否存在而且是一個符號連接。
#!/bin/bash
#/root/test/str.sh
file="/root/test/str.sh"
#-b 檢測文件是不是塊設備文件,若是是,返回ture
if [ -b $file ]
then
   echo "文件是塊設備文件:true"
else
   echo "文件不是塊設備文件: false"
fi
#-c 檢測文件是不是字符設備文件,若是是,則返回true
if [ -c $file ]
then
   echo "文件是字符設備文件:返回true"
else
  echo "文件不是字符設備文件:返回false"
fi
#-d 檢測文件是不是目錄,若是是返回true
if [ -d $file ]
then
   echo "文件是目錄,返回true"
else
  echo "文件不是目錄, 返回false"
fi
#-f 檢測文件是不是普通文件(即不是目錄,也不是設備文件),若是是,則返回true
if [ -f $file ]
then
  echo "文件是普通文件: true"
else
  echo "文件不是普通文件:false"
fi
#-g 檢測文件是否設置了SGID位,若是是,返回true
if [ -g $file ]
then
   echo "文件設置了SGID位,可是什麼是SGID位: true"
else
   echo "文件沒有設置SGID位,false"
fi
# -k 檢測文件是否設置了粘着(sticky Bit)若是是返回true
if [ -k $file ]
then
  echo "文件設置了粘着位:true"
else
  echo "文件沒有設置粘着位:false"
fi
#-p 檢測文件是不是有名管道,若是是返回true
if [ -p $file ]
then
   echo "文件時有名管道:true"
else
  echo "文件不是有名管道;false"
fi
#-u 檢測文件是否設置了SUID位,若是是返回true
if [ -u $file ]
then
  echo "文件設置了SUID位,true"
else
  echo "文件沒有設置SUID位,false"
fi
# -r 檢測文件是否可讀:若是是返回true
if [ -r $file ]
then
 echo "文件可讀:true"
else
  echo "文件不可讀,false"
fi
#-w 檢測文件是否可寫
if [ -w $file ]
then
 echo "文件可寫,true"
else
  echo "文件不可寫,false"
fi
#-x 檢測文件是否可執行
if [ -x $file ]
then
  echo "文件可執行,true"
else
  echo "文件不可執行,false"
fi
#-s 返回文件是否爲空, 不爲空返回true
if [ -s $file ]
then
  echo "文件爲空, true"
else
  echo "文件不爲空, false"
fi
# -e 檢測文件是否存在,若是存在返回true
if [ -e $file ]
then
 echo "文件存在, true"
else
 echo "文件不存在, false"
fi
#-S: 判斷某文件是否 socket。
if [ -S $file ]
then
  echo "文件是 SOCKET"
else
  echo "文件不是socket"
fi
#-L 檢測文件是否存在而且是一個符號鏈接
if [ -L $file ]
then
 echo "-L true"
else
  echo "-L false"
fi

  

文件不是塊設備文件: false
文件不是字符設備文件:返回false
文件不是目錄, 返回false
文件是普通文件: true
文件沒有設置SGID位,false
文件沒有設置粘着位:false
文件不是有名管道;false
文件沒有設置SUID位,false
文件可讀:true
文件可寫,true
文件可執行,true
文件爲空, true
文件存在, true
文件不是socket
-L false
相關文章
相關標籤/搜索