shell指令碼的if判斷語句 案例

2021-12-30 09:50:49 字數 4155 閱讀 4964

if語句

1、按照檔案型別進行判斷

-d 檔案)判斷該檔案是否存在,並且是否為字元裝置檔案(是字元裝置為真)

-e 檔案)判斷該檔案是否存在(存在為真)

[-e /root]

echo $輸出為0 #判斷為真,即為0

常用的格式有:

[ -e /root ] && echo yes || echo no

一、單分支if條件語句格式有如下兩種:

if [ 條件判斷式 ];then

程式fi

或者if [ 條件判斷式 ]

then

程式fi

但分支條件語句需要注意幾個點

·if語句使用fi結尾,和一般語言使用大括號結尾不同

·[ 條件判斷式 ]就是使用test命令判斷,所以中括號和條件判斷式之間必須有空格

·then後面和符合條件之後執行的程式,可以放在之後,用「;」分割。也可以換行寫入,就不需要是「;」了

例子:判斷分割槽使用率

vim disk_test.sh

#!/bin/bash

#!/bin/bash

#統計根分割槽使用率的指令碼_neo

rate=$(df -h |grep "/dev/vda1" | awk '' | cut -d "%" -f1)

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

二、雙分支if條件語句

if [ 條件判斷式 ]

then

條件成立時,執行的程式

else

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

fi例子1:備份mysql資料庫

#!/bin/bash

#備份mysql資料庫

ntpdate asia.pool.ntp.org &> /dev/null

#同步系統時間

date=$(date +%y%m%d)

#把當前系統時間按照"年月日"格式賦予變數date

size=$(du -sh /var/lib/mysql)

#統計mysql資料庫的大小,並把大小賦予size變數

if [ -d /tmp/dbbak ]

#判斷/tmp/dbbak資料夾是否存在,存在執行then,不存在執行else

then

echo "date : $date" > /tmp/dbbak/dbinfo.txt

echo "data size : $size" >> /tmp/dbbak/dbinfo.txt

cd /tmp/dbbak

tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &> /dev/null

rm -rf /tmp/dbbak/dbinfo.txt

else

mkdir /tmp/dbbak

echo "date : $date" > /tmp/dbbak/dbinfo.txt

echo "data size : $size" >> /tmp/dbbak/dbinfo.txt

cd /tmp/dbbak

tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &> /dev/null

rm -rf /tmp/dbbak/dbinfo.txt

fi例子2:判斷apache是否啟動

#使用nmap命令掃瞄伺服器,並擷取apache服務的狀態,賦予變數port

fi#自己將apache停止,檢視apache會不會自動重新啟動!

三、多分支if條件分支

if [ 條件判斷式1 ]

then

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

elif [ 條件判斷式2 ]

then

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

...省略更多條件...

else

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

fi例子1:判斷使用者輸入指令的是什麼

#!/bin/bash

read -p "please input a filename:" file

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

if [ -z "$file" ]

#判斷file變數是否為空

then

echo "error,please input a filename"

exit 1

elif [ ! -e "$file" ]

#判斷file的值是否存在

then

echo "your input is not a file!"

exit 2

elif [ -f "$file" ]

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

then

echo "$file is a regulare file!"

elif [ -d "$file" ]

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

then

echo "$file is a directory!"

else

echo "$file is an other file!"

ficase語句

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

case $變數名 in

"值1")

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

"值2")

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

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

esac

例子1:

#!/bin/bash

#判斷使用者輸入

read -p "please choose yes/no " -t 30 cho

#將使用者的值賦予給cho

case $cho in

"yes")

echo "your choose is yes!"

"no")

echo "your choose is no!"

echo "your choose is error!"

esac

例子2:

#!/bin/bash

echo ' you want to shanghai,please input "1" '

echo ' you want to guangzhou,please input "2" '

echo ' you want to chengdu,please input "3" '

read -t 30 -p "please input your choose " -t 30 cho

case "$cho" in

"1")

echo "shanghai 的機票已經發售"

"2")

echo "guangzhou 的機票已經發售"

"1")

echo "chengdu 的機票已經發售"

echo "error 1/2/3"

esac

for迴圈

while迴圈

shell指令碼的條件判斷語句

條件判斷,顧名思義,就是對當前引數進行相關條件的比較,如果符合要求就進行相對應的操作,條件語句涉及到兩種語法,if和case,兩種語法都各具特色,我們可以通過例項來進行比較 if 判斷條件1 then 條件為真的分支 elif 判斷條件2 then 條件為真的分支 elif 判斷條件3 then 條...

shell 指令碼之判斷語句 if 詳解

使用 linux 系統這麼長時間,對 shell 指令碼也算是比較熟悉。其實不管是搞開發,還是搞運維,shell 指令碼都是必備的基本技能。這次抽時間好好總結一下 shell 方面的知識,綜合的再學習一下,記錄。這篇文章總結的是 shell 指令碼的 if 語句的使用。if 條件判斷 then el...

Shell 判斷語句

檔案判斷運算子 b 當file存在並且是塊檔案時返回真 c 當file存在並且是字元檔案時返回真 d 當pathname存在並且是乙個目錄時返回真 e 當pathname指定的檔案或目錄存在時返回真 f 當file存在並且是正規檔案時返回真 g 當由pathname指定的檔案或目錄存在並且設定了sg...