Linux Shell程式設計 條件判斷語法

2022-07-31 19:54:17 字數 4576 閱讀 5086

語法格式:

if [條件判斷式];then

程式fi

或者

if

[條件判斷式]

then

程式fi

在使用單分支 if 條件查詢時需要注意幾點:

示例:通過指令碼判斷根分割槽的使用率是否超過 80%,如果超過 80% 則向管理員報警。 :

[root@localhost ~]# df -h

#檢視一下伺服器的分割槽狀況

檔案系統 容量 已用 可用 已用% %掛載點

/dev/sda3 20g 1.8g 17g 10% /tmpfs 306m

0 306m 0% /dev/shm

/dev/sda1 194m 26m 158m 15% /boot

/dev/sro 3.5g 3.5g 0100% /mnt/cdrom

[root@localhost ~]# vi

sh/if1.sh

#!/bin/bash

#統計根分割槽的使用率

rate=$(df -h | grep

"/dev/sda3

" | awk

'' | cut -d"

%"-f1)

#把根分割槽使用率作為變數值賦予變數rate

if [$rate -ge 80

】#判斷rate的值,如果大於等於80,則執行then程式

then

echo

'warning! /dev/sda3 is full!!"

#列印警告資訊。在實際工作中,也可以向管理員傳送郵件

fi

"rate=$(df-h|grep "/dev/sda3"|awk''|cut-d"%"-f1)"命令:先使用"df-h"列出系統中的分割槽情況;然後使用"grep"命令提取出根分割槽行;再使用"awk"命令列出第五列,也就是根分割槽使用率這一列(不過使用率是 10%,不好比較,還要提取出 10 這個數字);最後使用"cut"命令(cut 命令比 awk 命令簡單),以"%"作為分隔符,提取出第一列。

在雙分支 if 條件語句中,當條件判斷式成立時,則執行某個程式;當條件判斷式不成立時,則執行另乙個程式。語法如下:

if

[條件判斷式]

then

當條件判斷式成立時,執行的程式

else

當條件判斷式不成立時,執行的另乙個程式

fi

示例:

#!/bin/bash

#判斷輸入的檔案是否是乙個目錄

read -t 30 -p "

please input a directory:

"dir

#read接受鍵盤的輸入,並存入dir變數

if[-d $dir

]#測試$dir中的內容是否是乙個目錄

then

echo

"yes

"#如果是乙個目錄,則輸出yes

else

echo"no

"#如果不是乙個目錄,則輸出no

fi

在多分支 if 條件語句中,允許執行多次判斷。也就是當條件判斷式 1 成立時,執行程式 1;當條件判斷式 2 成立時,執行程式 2;依次類推,當所有條件不成立時,執行最後的程式。語法如下:

if

[條件判斷式1]

then

當條件判斷式1成立時,執行程式1

elif

[條件判斷式2]

then

當條件判斷式2成立時,執行程式2

…省略更多條件...

else

當所有條件都不成立時,最後執行此程式、

fi

示例:用多分支 if 條件語句來判斷使用者輸入的是乙個個檔案還是乙個目錄。

[root@localhost ~]#vi

sh/if-elif.sh

#!/bin/bash

#判斷使用者輸入的是什麼檔案

read -p "

please input a filename:

"file

#接收鍵盤的輸入,並賦予變數file

if[-z "

$file"]

#判斷file變數是否為空

then

echo

"error,please input a filename

"#如果為空,則執行程式1,也就是輸出報錯資訊、

exit

1#退出程式,並定義返回值為1 (把返回值賦予變數$?)

elif[!-e "

$file"]

#判斷file的值是否存在

then

echo

'your input is not a file!"

#如果不存在,則執行程式2

exit

2#退出程式,並定義返回值為2

elif[-f "

$file"]

#判斷file的值是否為普通檔案

then

echo

"$file is a regulare file!

"#如果是普通檔案,則執行程式3

elif[-d"

$file"]

#判斷file的值是否為目錄檔案

then

echo

"$file is a directory!

"#如果是目錄檔案,則執行程式4

else

echo is an other file!"

#如果以上判斷都不是,則執行程式5

fi

exit 命令是退出執行程式的命令,如果符合條件 1(沒有輸入)和條件 2(輸入的不是檔案),則需要執行 exit 命令;否則程式還是會執行一下指令碼的。至於 exit 後面的返回值,是自由定義的,主要用於把返回值賦予變數 $?。

示例:

[root@localhost ~]# chmod

755sh/if-elif.sh

#賦予執行許可權

[root@localhost ~]# sh/if-elif.sh

#執行指令碼

please input a filename:

#沒有任何輸入

error,please input a filename

#報錯資訊是指令碼中自己定義的

[root@localhost ~]# echo $?

1#變數$?的返回值是我們自己定義的1

[root@localhost ~]# sh/if-elif.sh

please input a filename: jkgeia

#隨便輸入不是檔案的字串

your input is not a

file!#報錯資訊是自己定義的

[root@localhost ~]# echo $?

2#變數$?的返回值是我們自己定義的2

case 語句和 if...elif...else 語句一樣都是多分支條件語句,不過和多分支 if 條件語句不同的是,case 語句只能判斷一種條件關係,而 if 語句可以判斷多種條件關係。

case 語句的語法如下:

case $變數名 in

"值 1")

;;如果變數的值等於值1,則執行程式1,值2"

)如果變數的值等於值2,則執行程式2

…省略其他分支…

*)如果變數的值都不是以上的值,則執行此程式

;;esac

case 語句會取出變數中的值,然後與語句體中的值逐一比較。如果數值符合,則執行對應的程式;如果數值不符,則依次比較下乙個值;如果所有的值都不符合,則執行"*)"("*"代表所有其他值)中的程式。

case 語句以"case"開頭,以"esac"結尾。

在每個分支程式之後要以";;"(雙分號)結尾,代表該程式段結束。

示例如下:

[root@localhost ~]# vi

sh/case.sh

#!/bin/bash

#判斷使用者輸入

read -p "

please choose yes/no:

" -t 30

cho#在螢幕上輸出

"請選擇yes/no

",然後把使用者選擇賦予變數cho

case $cho in

#判斷變數cho的值

"yes")

#如果是yes

echo

"your choose is yes!

"#則執行程式1

;;"no

")#如果是no

echo

"your choose is no!

"#則執行程式2

;;*)

#如果既不是yes,也不是no

echo

"your choose is error!

"#則執行此程式

;;esac

請使用者輸入 yes 或 no,如果輸入的是 yes,則輸出"your choose is yes!";如果輸入的是 no,則輸出"your choose is no!";如果輸入的是其他字元,則輸出"your choose is error!"。

Linux shell程式設計 條件判斷

太多了,沒記住。每次寫都要去翻,整理一下存到這裡方便查詢。b 檔案 判斷該檔案是否存在,並且是否為塊裝置檔案 是塊裝置檔案則為真 c 檔案 判斷該檔案是否存在,並且是否為字元裝置檔案 是字元裝置檔案為真 d 檔案 判斷該檔案是否存在,並且是否為目標檔案 是目錄為真 e 檔案 判斷該檔案是否存在 存在...

Linux shell程式設計中的判斷條件

b file 若檔案存在且是乙個塊特殊檔案,則為真 c file 若檔案存在且是乙個字元特殊檔案,則為真 d file 若檔案存在且是乙個目錄,則為真 e file 若檔案存在,則為真 f file 若檔案存在且是乙個規則檔案,則為真 g file 若檔案存在且設定了sgid位的值,則為真 h fi...

linux shell 指令碼程式設計 條件語句學習

1.if 條件語句學習 if 表示式 if variable in array 語句1else 語句2fi 1.例子 bin bash num 100 if num 4 then 表示比較大小 echo this num is num greater 4 fi邏輯運算子解析 f 判斷檔案是否存在 i...