個數 rom local 存在 nbsp 之間 警告 執行權限 不同

if條件判斷語句

單分支 if 條件語句

語法格式:

if [條件判斷式];then
程序
fi

或者

if [條件判斷式]
then
程序
fi

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

  • if 語句使用 fi 結尾,和一般語言使用大括號結尾不同。
  • [條件判斷式] 就是使用 test 命令判斷,所以中括號和條件判斷式之間必須有空格。
  • then 後面跟符合條件之後執行的程序。可以放在 [] 之後,用";"分隔;也可以換行寫入,就不需要";":

示例:通過腳本判斷根分區的使用率是否超過 80%,如果超過 80% 則向管理員報警。 :

[[email protected] ~]# 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
[[email protected] ~]# vi sh/if1.sh
#!/bin/bash
#統計根分區的使用率
rate=$(df -h | grep "/dev/sda3" | awk {print $5} | 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‘{print$5}‘|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 條件語句

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

if[條件判斷式1]
then
當條件判斷式1成立時,執行程序1
elif [條件判斷式2]
then
當條件判斷式2成立時,執行程序2
…省略更多條件...
else
當所有條件都不成立時,最後執行此程序、
fi

示例:用多分支 if 條件語句來判斷用戶輸入的是一個個文件還是一個目錄。

[[email protected] ~]#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 後面的返回值,是自由定義的,主要用於把返回值賦予變量 $?。

示例:

[[email protected] ~]# chmod 755 sh/if-elif.sh
#賦予執行權限
[[email protected] ~]# sh/if-elif.sh
#執行腳本
Please input a filename:
#沒有任何輸入
Error,please input a filename
#報錯信息是腳本中自己定義的
[[email protected] ~]# echo $?
1
#變量$?的返回值是我們自己定義的1
[[email protected] ~]# sh/if-elif.sh
Please input a filename: jkgeia
#隨便輸入不是文件的字符串
Your input is not a file!
#報錯信息是自己定義的
[[email protected] ~]# echo $?
2
#變量$?的返回值是我們自己定義的2

case多分支條件判斷

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

case $變量名 in
"值 1")
;;
如果變量的值等於值1,則執行程序1,值
2")
如果變量的值等於值2,則執行程序2
…省略其他分支…
*)
如果變量的值都不是以上的值,則執行此程序
;;
esac

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

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

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

示例如下:

[[email protected] ~]# 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編程 條件判斷語法