shell條件判斷


1.判斷語法

a)  test 條件表達式

b)  [ 條件表達式 ]

c)  [[ 條件表達式 ]]        可匹配正則 =~

d)  判斷后執行多個命令

[  條件1 ] && {
          命令1
          命令2
}

例如:

[ 1 -eq 2 ]&&{
    echo aa;
    echo bb;
}||{
    echo cc
    echo dd
}

 

man test去查看,很多的參數都用來進行條件判斷

 

2.文件類型判斷

-e 是否存在 不管是文件還是目錄,只要存在,條件就成立
-f 是否為普通文件
-d 是否為目錄
-S socket
-p pipe
-c character
-b block
-L 軟link

 

3.文件內容判斷

-s 是否為非空文件

! -s 表示空文件

 

4.文件權限判斷

-r  當前用戶對其是否可讀
-w 當前用戶對其是否可寫
-x 當前用戶對其是否可執行
-u 是否有suid
-g 是否sgid
-k 是否有t位

 

5.兩個文件的比較判斷

file1 -nt file2	 比較file1是否比file2新
file1 -ot file2	 比較file1是否比file2舊
file1 -ef file2	 比較是否為同一個文件,或者用於判斷硬連接,是否指向同一個inode

 

6.整數之間的判斷

-eq	 相等
-ne	 不等
-gt	 大於
-lt  	 小於
-ge	 大於等於
-le	小於等於

 

7.字符串之間的判斷

-z  是否為空字符串 字符串長度為0,就成立
-n  是否為非空字符串 只要字符串非空,就是成立
string1 = string2    是否相等           --等號兩邊要有空格
string1 != string2   不等
! 結果取反

 

注意

[ "$1" = "abc" ]       --判斷字符是否相等,變量也要用雙引號

 

8.多重條件判斷

邏輯判斷符號:

-a 和 && 邏輯與

只有兩個條件都成立,整個大條件才成立

[ 1 -eq 1 ] && [ 2 -ne 3 ]

[ 1 -eq 1 -a 2 -ne 3 ]

 

-o 和 || 邏輯或

只要其中一個條件成立,整個大條件就成立

[ 1 -eq 1 -o 2 -ne 2 ]

[ 1 -eq 1 ] || [ 2 -ne 2 ]

 

 

! 邏輯非 優先級最低

-a 優先級 比 -o 優先級要高

[[]] 和(())中可以使用&& || 不能使用 -a -o

 

9.實例

# [ $(id -u) -eq 0 ] && echo "當前是超級用戶"            --id -u  username  可以查看用戶id

$ [ $UID -eq 0 ] && echo "當前是超級用戶" || echo "you不是超級用戶"

# ((1==2));echo $?      --C語言風格的數值比較

# ((1>=2));echo $?

 

 

題目:輸入一個路徑,判斷路徑是否存在,而且輸出是文件還是目錄,如果是鏈接文件,還得輸出是有效的連接還是無效的連接

思路:鏈接文件也屬於文件,所以先判斷鏈接文件,再去判斷是否為文件

 

 #!/bin/bash
read -p "Input your path:" path
if [ -e $path -a -L $path ];then 
    echo "$0 is link file"
elif [ ! -e $path ] && [ -L $path ];then
    echo "$0 is not effctive link file"
elif [ -d $path ];then
    echo "$0 is a dirctory"
elif [ -f $path ];then
    echo " $0 is file"
else
    echo "$0 is other file"
fi

ls -L  dir                   -L可以判斷軟鏈接

--無效鏈接用-e判斷會不存在

-L   如果遇到性質為符號鏈接的文件或目錄,直接列出該鏈接所指向的原始文件或目錄;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM