1. 程式人生 > >表達式與運算符

表達式與運算符

bubuko 相加 img 是否 else 粘著位 命令 整數 條件判斷

  bash支持很多運算符,包括算數運算符、關系運算符、布爾運算符、字符串運算符和文件測試運算符。

1、表達式

  bash的表達式可以分為算術表達式和邏輯表達式兩種類型。

1、算術表達式

  數學運算涉及到表達式求值。bash自身並不支持簡單的數學運算,但是可以awk和expr等命令來實現數學運算,其中expr最為常用,使用它能夠完成表達式的求值操作。示例,將兩個數相加,同時將運算結果表達出來

expr 5 + 3

  註意:操作數和運算符之間一定要有空格,否則expr會簡單的將其當作字符串輸出。

  當然,可以將計算的值用作變量,也可以將expr計算的結果賦值給變量。

n=1

m
=5 expr $n + $m val=`expr 2 + 2` echo $val

技術分享圖片

  註意,完整的表達式要用反引號"`"括起來。

  更為簡單的方式是使用$[]表達式進行數學計算,例如

val=$[5+3]
echo $val

  技術分享圖片

這種形式不要求運算符和操作數之間有空格。

  還可以用let命令來計算整數表達式的值,如

n=1
m=5
let val=$n+$m
echo $val

  技術分享圖片

2、邏輯表達式

  邏輯表達式主要用於條件判斷,值為true(或為0)表示結果為真,值為false表示結果為假。

  通常使用test命令來判斷表達式的真假。語法格式如下:

test 邏輯表達式

  例如以下語句用於比較兩個字符串是否相等。

test "abc"="xyz"

  test命令更常用方括號"[]"代替。語法格式如下

[ 邏輯表達式 ]

   在使用左方括號而非test時,其後必須始終跟著一個空格、要評估的邏輯表達式、一個空格和右方括號,右方括號表示所需評估表達式的結束。邏輯表達式兩邊的空格是必需的,這表示調用test,以區別於同樣經常使用方括號的字符、模式匹配操作。

  邏輯表達式判斷表達式的結果,然後返回真假,通常和if、while或until命令結合使用,用於條件判斷,以便對程序流進行廣泛的控制。

2、算術運算符

  算術運算符用於數值計算,主要的算術運算符列表如下:

+:加法
-:減法
*:乘法
/:除法
%;取余值
=:賦值

  這裏給出一個使用算術運算符的例子

#!/bin/bash
a=1
b=2
val=`expr $a + $b`
echo "a + b : $val"
#乘法(*)前面必須加轉義符號反斜杠(\)才能實現乘法操作
val=`expr $a \* $b`
echo "a*b:$val"

  技術分享圖片

3、整數關系運算符

  Shell支持整數比較,還需要使用整數關系運算符,列表如下:

-eq:相等,檢測兩個數是否相等,相等返回true
-ne:不等於。檢測兩個數是否相等,不相等返回true
-gt:大於。檢測左邊的數是否大於右邊的,如果是,返回true
-lt:小於。檢測左邊的數是否小於右邊的,如果是,返回true
-ge:大於等於
-le:小於等於

   下面是一個關系運算符的例子

#!/bin/bash

a=10

b=20

if [ $a -eq $b ]

then 

	echo "$a -eq $b :a等於b"

else

	echo "$a -eq $b:a不等於b"

fi

  技術分享圖片

4、字符串檢測運算符

  字符串運算符用於檢測字符串,列表如下:

=:檢測兩個字符串是否相等,相等返回true。
!=:檢測兩個字符串是否相等,不相等返回true。
-z:檢測字符串長度是否為0,為0返回true。
-n:檢測字符串長度是否為0,不為0返回true。
str:檢測字符串是否為空,不為空返回true。

  下面給出一個例子

#!/bin/bash
a="abc"
b="xyz"
if [ $a = $b ]
then 
	echo "$a = $b :a等於b"
else 
	echo "$a = $b :a不等於b"
fi
	if [ -z $a ]
then 
	echo "-z $a :字符串長度為0 "
else 
	echo "-z $a 字符串長度不為0 "
fi 
	if [ $a ]
then 
	echo "$a :字符串為非空"
else
	 echo "$a :字符串為空"
fi

技術分享圖片

5、文件測試運算符

  文件測試運算符用於檢測文件的各種屬性,以文件名為參數

-b:檢測文件是不是塊設備文件,如果是,則返回true。
-c:檢測文件是不是字符設備文件,如果是,則返回true。
-d :檢測文件是不是目錄,如果是,則返回true。
-f:檢測文件是不是普通文件,如果是,則返回true。
-g:檢測文件是否設置了SGID位,如果是,則返回ture。
-k:檢測文件是否設置了粘著位,如果是,則返回true。
-p:檢測文件是不是具名管道,如果是,則返回,true。
-u:檢測文件是是否設置了SUID位,如果是,則返回ture。
-r:檢測文件是否刻度,如果是,則返回true。
-w:檢測文件是否可寫,如果是,則返回true。
-x :檢測文件是否可執行,如果是,則返回true。
-s:檢測文件是否為空,不為空則返回true。
-e:檢測文件是否存在,如果是,則返回true。

  例如,下面的代碼將檢測/bin/bash的讀寫屬性

#!/bin/bash
file="/bin/bash"
if [ -r $file ]
then 
  echo "文件具備讀取權限"
else
  echo "文件不具備讀取權限"
fi
if [ -w $file ]
  then 
  echo "文件具備寫入權限"
else
  echo "文件不具備寫入權限"
fi

技術分享圖片

6、布爾運算符

  布爾運算符用於對一個或多個邏輯表達式執行邏輯運算,結果為true或為false。通常用來對多個條件進行判斷。有與、或、非3個運算符。

  -a:與運算。兩個條件都為true才返回true。

  -o:或運算。有一個表達式為true就返回true。

  !:非運算。表達式為true,則返回false,否則返回true。

這裏給出一個示例:

#!/bin/bash

a=5

b=10

if [ $a -lt 10 -a $b -gt 15 ]

   then 

	echo "兩個條件都滿足"

else 

	echo "兩個條件都不滿足"

fi

  技術分享圖片

表達式與運算符