- 算術運算子
算術運算子,常用的有+
、-
、*
、/
、%
、++
、--
、**
+
- 加法運算子[root@www ~]$ expr 1 + 1 2 [root@www ~]$ echo $(( 1 + 1 )) 2
-
- 減法運算子[root@www ~]$ expr 1 - 1 0 [root@www ~]$ echo $(( 1 - 1 )) 0
*
- 乘法運算子[root@www ~]$ expr 2 \* 2 4 [root@www ~]$ echo $(( 2 * 2 ))
/
- 除法運算子[root@www ~]$ expr 2 \/ 2 1 [root@www ~]$ echo $(( 2 / 2 )) 1
%
- 取餘運算子[root@www ~]$ expr 2 % 2 0 [root@www ~]$ echo $(( 10 % 2 )) 0
**
- 冪運算子[root@www ~]$ echo $(( 2 ** 4 )) 16
++
- 增加運算子[root@www ~]$ variable=0 [root@www ~]$ (( variable++ )) [root@www ~]$ echo $variable 1 #------------------------------------- [root@www ~]$ variable=0 [root@www ~]$ let variable++ [root@www ~]$ echo $variable 1
--
- 減少運算子[root@www ~]$ variable=100 [root@www ~]$ (( variable-- )) [root@www ~]$ echo $variable 99 #------------------------------------ [root@www ~]$ variable=100 [root@www ~]$ let variable-- [root@www ~]$ echo $variable 99
- 關係運算子
關係運算子,常用的有<
、<=
、>
、>=
、=
、==
、!=
<
- 小於運算子[root@www ~]$ echo $(( 1 < 2 )) 1 # 返回值為0表示(false),返回值為1表示(true) [root@www ~]$ (( 1 < 2 ));echo $? 0 # 返回值為0表示(tree),返回值為1表示(false) [root@www ~]$ [[ 1 < 2 ]];echo $? 0 # 返回值為0表示(true),返回值為1表示(false)
<=
- 小於或等於運算子[root@www ~]$ echo $(( 1 <= 2 )) 1 # 返回值為0表示(false),返回值為1表示(true) [root@www ~]$ (( 1 < 2 ));echo $? 0 # 返回值為0表示(tree),返回值為1表示(false)
>
- 大於運算子[root@www ~]$ echo $((1 > 2)) 1 # 返回值為0表示(false),返回值為1表示(true) [root@www ~]$ ((1 > 2));echo $? 0 # 返回值為0表示(tree),返回值為1表示(false) [root@www ~]$ [[ 1 > 2 ]];echo $? 0 # 返回值為0表示(true),返回值為1表示(false)
>=
- 大於或等於運算子[root@www ~]$ echo $((1 >= 2)) 1 # 返回值為0表示(false),返回值為1表示(true) [root@www ~]$ ((1 >= 2));echo $? 0 # 返回值為0表示(tree),返回值為1表示(false)
=
- 等於運算子[root@www ~]$ [ "word" = "word" ];echo $? # 該行為是進行字串比較 [root@www ~]$ [[ "word" = "word" ]];echo $? # 該行為是進行字串比較
==
- 等於運算子[root@www ~]$ expr 1 == 1 1 # 返回值為0表示(false),返回值為1表示(true) [root@www ~]$ echo $((1 == 1)) 1 # 返回值為0表示(false),返回值為1表示(true) [root@www ~]$ ((1 == 1));echo $? 0 # 返回值為0表示(true),返回值為1表示(false) [root@www ~]$ [[ 1 == 1 ]];echo $? 0 # 返回值為0表示(true),返回值為1表示(false)
!=
- 不等於運算子[root@www ~]$ expr 1 != 1 0 # 返回值為0表示(false),返回值為1表示(true) [root@www ~]$ echo $((1 != 1)) 0 # 返回值為0表示(false),返回值為1表示(true) [root@www ~]$ ((1 != 1));echo $? 1 # 返回值為0表示(true),返回值為1表示(false) [root@www ~]$ [[ 1 != 1 ]];echo $? 1 # 返回值為0表示(true),返回值為1表示(false)
- 邏輯運算子
邏輯運算子,常用的有&&
、||
、!
&&
- 邏輯與運算子[root@www ~]$ make && make install # 只有當make命令成功執行時,才會執行後面的語句 [root@www ~]$ [ -f /etc/passwd -a -d /etc ];echo $? # -a 等同於 &&
||
- 邏輯或運算子[root@www ~]$ make || echo "Make failed !" # 當make執行失敗時,才會執行後面的語句 [root@www ~]$ [ -f /etc/passwd -o -d /etc];echo $? # -o 等同於 ||
!
- 邏輯非運算子[root@www ~]$ [ 1 -eq 1 ];echo $? 0 [root@www ~]$ [ ! 1 -eq 1 ];echo $? 1 # !真 = 假 , !假 = 真 # 也就是將結果取反,如果表示式為0則返回1,為1則返回0、
- 按位運算子
按位運算子,常用的有&
、|
、^
、~
、<<
、>>
、
&
- 按位與運算子[root@www ~]$ echo $((0 & 0)) 0 [root@www ~]$ echo $((0 & 1)) 0 [root@www ~]$ echo $((1 & 0)) 0 [root@www ~]$ echo $((1 & 1)) 1 # 由此得出,只有當兩邊的值都為true時,結果才為true
|
- 按位或運算子[root@www ~]$ echo $(( 0 | 0 )) 0 [root@www ~]$ echo $(( 0 | 1 )) 1 [root@www ~]$ echo $(( 1 | 0 )) 1 [root@www ~]$ echo $(( 1 | 1 )) 1 # 由此得出,只要有一個值為true,則結果為true
^
- 異或運算子[root@www ~]$ echo $(( 0 ^ 0 )) 0 [root@www ~]$ echo $(( 0 ^ 1 )) 1 [root@www ~]$ echo $(( 1 ^ 0 )) 1 [root@www ~]$ echo $(( 1 ^ 1 )) 0 #----------------------------------------------- # 異或是運算二進位制,兩個值進行運算,同號為0,異號為1,例如: [root@www ~]$ echo $((99^88)) # 開始運算,異或後為59,為什麼? 59 # 這裡為運算的過程,99和88進行異或,如果兩個都是一樣的就是0,不一樣就是1 [root@www ~]$ echo "obase=2;ibase=10;99"|bc # 得出99的二進位制 1011000 [root@www ~]$ echo "obase=2;ibase=10;88"|bc # 得出88的二進位制 1100011 # 99 = 1011000 # 88 = 1100011 # 59 = 0111011 # 此處為上面兩個二進位制運算後的結果, [root@www ~]$ echo "obase=10;ibase=2;0111011"|bc 59 # 最終結果是正確的,常用於互換兩個變數的值,但該值一定是整數
~
- 取反運算子[root@www ~]$ echo $(( ~9 ))
<<
- 左移運算子[root@www ~]$ echo $((1<<2))
>>
- 右移運算子[root@www ~]$ echo $((2>>1))
- 檔案測試符
檔案測試有很多,如下:
-n
- 檢測字元長度是否為0,不為0則返回true
-z
- 檢測字元長度是否為0,為0則返回true
-eq
- 等於
-ge
- 大於等於
-gt
- 大於
-le
- 小於等於
-lt
- 小於
-ne
- 不等於
-ef
- 判斷 file1
和 file2
是否具有相同的裝置和inode
編號
-nt
- 判斷 file
和 file2
哪一個檔案比較新
-ot
- 判斷 file
和 file2
哪一個檔案比較舊
-b
- 判斷檔案是否存在,並且是塊裝置檔案
-c
- 判斷檔案是否存在,並且是字符裝置檔案
-d
- 判斷檔案是否存在,並且是目錄
-e
- 判斷檔案是否存在
-f
- 判斷檔案是否存在,並且是普通檔案
-g
- 判斷檔案是否存在,並且設定了SGID位
-G
- 判斷檔案是否存在,並且GID有效
-h
- 判斷檔案是否存在,並且是一個符號連結(與-L
相同)
-k
- 判斷檔案是否存在,並且設定了粘著位
-L
- 判斷檔案是否存在,並且是一個符號連結(與-h
相同)
-O
- 判斷檔案是否存在,並且UID有效
-p
- 檢測檔案是否存在,並且具備命名管道
-r
- 判斷檔案是否存在,並且具備讀許可權
-s
- 判斷檔案是否存在,並且大小大於0
-S
- 判斷檔案是否存在,並且是一個套接字
-t
- 檔案描述符是在一個終端開啟的
-u
- 判斷檔案是否存在,並且設定了SUID位
-w
- 判斷檔案是否存在,並且具備寫許可權
-x
- 判斷檔案是否存在,並且具備執行許可權