Shell程式設計之條件語句

2021-10-10 06:05:41 字數 4779 閱讀 7634

test命令

測試表示式是否成立,若成立返回0,否則返回其他數值

格式一:test 條件表示式

格式二:[ 條件表示式 ]

檔案測試

[ 操作符 檔案或目錄 ]

常用的測試操作符

-d:測試是否為目錄(directory)

-e:測試目錄或檔案是否存在(exist)

-f:測試是否為檔案(file)

-r:測試當前使用者是否有許可權讀取(read)

-w:測試當前使用者是否有許可權寫入(write)

-x:測試當前使用者是否由許可權執行(excute)

舉個栗子:

[root@root dev]# [

-d /dev/bus ]

[root@root dev]# echo $?

0[root@root dev]# [

-d /dev/bus ]

&& echo "yes"

yes

整數值比較

[ 整數1 操作符 整數2 ]

常用的測試操作符

-eq:等於(equal)

-ne:不等於(not equal)

-gt:大於(greater than)

-lt:小於(lesser than)

-le:小於或等於(lesser or equal)

-ge:大於或等於(greater or equal)

舉個栗子:

[root@root dev]# who | wc -l

4[root@root dev]# unum=

`who | wc -l`

##檢視當前已登入使用者,並賦值給unum

[root@root dev]# echo $unum

4[root@root dev]# [ $unum -gt 3

]&& echo 'more' ##unum大於3的話,則輸出more

more

字串比較

格式1:[ 字串1 = 字串2 ] [ 字串1 != 字串2 ]

格式2:[ -z 字串 ]

常用的測試操作符

=:字串內容相同

!=:字串內容不同,!號表示相反的意思

-z:字串內容為空

邏輯測試

格式1:[ 表示式1 ] 操作符 [ 表示式2 ] …

格式2:命令1 操作符 命令2 …

常用的測試操作符

-a或&&:邏輯與,「而且」的意思

-o或||:邏輯或,「或者」的意思

!:邏輯否

單分支結構

執行流程:

1、首先判斷條件測試操作的結果,

2、如果返回值為0,表示條件成立,則執行then後面的命令序列,一直到遇見 fi 結束判斷為止,繼續執行其他指令碼**;

3、如果返回值不為0,則忽略then後面的命令序列,直接跳至 fi 行以後執行其他指令碼**。

if  條件測試操作

then 命令程式

fi

雙分支結構

執行流程:

1、首先判斷條件測試操作的結果,

2、如果條件成立,則執行then後面的命令序列1,忽略else及後面的命令序列2,直接遇見 fi 結束判斷;3、如果條件不成立,則忽略then及後面的命令序列1,直接跳至else後面的命令序列2並執行,直到遇見 fi 結束判斷。

if 條件測試操作

then 命令序列1

else 命令序列2

fi

多分支結構

執行流程:

1、首先判斷條件測試操作1的結果,

2、如果條件1成立,則執行命令序列1,然後跳至fi結束判斷;

3、如果條件1不成立,則繼續判斷條件測試操作2的結果,如果條件2成立,則執行命令命令序列2,然後跳至fi 結束判斷…

4、如果所有的條件都不滿足,則執行else後面的命令序列n,直到遇見 fi 結束判斷。

if 條件測試操作1

then 命令序列1

elif 條件測試操作2

then 命令序列2

else

命令序列3

fi

舉個栗子1(雙分支if語句):

[root@root dev]# vi ping.sh             ##編寫指令碼檔案

#!/bin/bash

ping -c 3

-i 0.2

-w 3 $1

&>

/dev/

null ## -c:傳送3個包,-i:間隔0.2秒,-w:超時3秒

if[ $?

-eq 0

]then

echo "$1 is up"

else

echo "$1 is down"

fi[root@root dev]# chmod +x ping.sh

[root@root dev]# .

/ping.sh 20.0

.0.12 ##測試開啟的主機

20.0

.0.12 is up

[root@root dev]# .

/ping.sh 20.0

.0.200 ##測試未開啟的主機

20.0

.0.200 is down

舉個栗子2(多分支if語句):

[root@root dev]# vi grade.sh

#!/bin/bash

read -p "請輸入你的分數:" grade

if[ $grade -ge 85]&&

[ $grade -le 100

]then

echo "$grade分!優秀"

elif [ $grade -ge 60]&&

[ $grade -le 84

]then

echo "$grade分!良好"

else

echo "$grade分!不及格"

fi[root@root dev]# chmod +x grade.sh

[root@root dev]# .

/grade.sh

[root@root dev]# .

/grade.sh

請輸入你的分數:66

66分!良好=

-098765

[root@root dev]# .

/grade.sh

請輸入你的分數:86

86分!優秀

[root@root dev]# .

/grade.sh

請輸入你的分數:45

45分!不及格

case多分支結構

執行流程:

1、首先使用「變數值」與模式1進行比較,

2、若取值相同則執行模式1後的命令序列,直到遇見雙分號「;;」後跳轉至esac,表示結束分支;

3、若與模式1不相匹配,則繼續與模式2進行比較,若取值相同則執行模式2後的命令序列,直到遇到雙份號「;;」後跳轉至esac,表示結束分支…

4、以此類推,若找不到任何匹配的值,則執行模式「 *)」後的命令序列,直到遇見esac後結束分支。

case 變數值 in

模式1)

命令序列1

;;模式2)

命令序列2

;;......

*)預設命令序列

esac

舉個栗子3(case多分支):

[root@client3 ~

]# vi key.sh

#!/bin/bash

read -p "輸入乙個字元,按enter鍵確認:" key

case

"$key"

in[a-z]|[

a-z]

) echo "你輸入的是 字母";;

[0-9

])echo "你輸入的是 數字";;

*)echo "你輸入的是其他字元"

esac

[root@client3 ~

]# chmod +x key.sh

[root@client3 ~

]# .

/key.sh

輸入乙個字元,按enter鍵確認:8

你輸入的是 數字

[root@client3 ~

]# .

/key.sh

輸入乙個字元,按enter鍵確認:h

你輸入的是 字母

[root@client3 ~

]# .

/key.sh

輸入乙個字元,按enter鍵確認:#

你輸入的是其他字元

shell程式設計之條件語句

一 條件測試方法 方法1 test 條件表示式 方法2 條件表示式 注 方法2條件表示式與中括號之間必須有空格 二 條件測試分類 檔案測試 格式 操作符 檔案或目錄 常用測試操作符 d 測試目錄是否存在 f 測試檔案是否存在 e 測試目錄或檔案是否存在 r 測試當前使用者是否可讀 w 測試當前使用者...

shell程式設計之if語句

目錄4.other eq 等於,如 if a eq b ne 不等於,如 if a ne b gt 大於,如 if a gt b ge 大於等於,如 if a ge b lt 小於,如 if a lt b le 小於等於,如 if a le b 小於 需要雙括號 如 a b 小於等於 需要雙括號 如...

shell程式設計if條件語句

if結構語句 if 表示式 then 語句elif 表示式 then 語句else 語句fi1 比較兩個整數大小 num 100 if num 10 then echo num 10 fi2 表示式 兩邊需要有乙個空格,等同test命令 num 100 if num gt 10 then if te...