bash編程之if……else條件判斷

一、if的單分支語法格式:shell

if 條件判斷;then
    語句1
    語句2
    ……
else
    語句1
    語句2
    ……
fi

二、if的多分支語法格式:express

if 條件判斷;then
    語句1
    語句2
    ……
elif
    語句1
    語句2
    ……
elif
    語句1
    語句2
    ……
else
    語句1
    語句2
    ……
fi

elif能夠有多個centos


在「判斷條件」這個字段裏能夠直接寫入bash下的命令、也能夠寫成條件測試bash

在判斷條件中要進行條件測試:less

條件測試方式:ide

  • 「[ expression ]」一箇中括弧裏寫表達式,工具

  • 「` expression `」兩個中括弧裏寫上表達式測試

  • 「test expression」spa

  • 「bash命令」ip

條件測試的類型:

  • 整數測試

    expression:[ 數值1 比較符 數值2 ]

    比較符通常有如下幾種:

    大於:-gt(greater than),大於等於:-ge(greater equal),小於:-lt(less than),小於等於:le(less equal),不等於:-ne(not equal)

  • 字符測試

    "\>":大於

    "\<":小於

    "=="或者"=":等於

    "=~":判斷左邊的字符串可否被右邊的模式所匹配,一般用於` expression `

    單目測試:

    -z:格式爲"[ -z $STRING ]",表示爲空值時則爲真,不爲空值時則爲假

    -n:格式爲"[ -n $STRING ]",表示爲空值時則爲假,不爲空值時則爲真

  • 文件、目錄測試

    -d:測試目錄是否存在

    -f:測試檔案是否存在

組合條件測試:

  • 當有多個測試條件時,咱們能夠把這些測試條件組合起來使用:

    -a:邏輯與

    -o:邏輯或

    !:邏輯非,這是單目操做

  • 當是bash命令之間組合測試時,則:

    &&:邏輯與

    ||:邏輯或

    !:邏輯非

example:

一、寫一個腳原本測試一個用戶是否是管理員,若是是管理員則顯示「用戶名 is admin」,若是是系統用戶剛顯示「用戶名 is system user」,不然顯示「用戶名 is common user」


#!/bin/bash
#
Uid=`id -u $1 &> /dev/null`
if [ -z $Uid ];then
        echo "No such user $1;"
        exit 8
fi
if [ $Uid -eq '0' ];then
        echo "$1 is admin."
elif [ $Uid -gt '0' -a $Uid -lt '500' ];then //這裏用到了邏輯與運算
        echo "$1 is system user."
elif [ $Uid -ge '500' ];then
        echo "$1 is common user."
fi

二、寫一個腳本測試一個用戶的shell是否是/bin/bash,若是是那輸出「用戶名 is bash user.」,不然輸出「用戶名 is no bash user.」

#!/bin/bash
#
Bash=`grep "^$1\>" /etc/passwd | cut -d: -f7`
if [ -z $Bash ];then
        echo "No such user $1."
        exit 9
fi
if [ $Bash == "/bin/bash" ];then
        echo "$1 is bash user."
else
        echo "$1 is not bash user."
fi

三、寫一個備份腳本,傳遞參數「gzip,bzip2,xz」給腳本,讓腳本調用相應的壓縮工具對備份文件進行壓縮,當用戶沒有給定參數時,則調用gzip進行壓縮。把/etc目錄下的全部文件歸檔壓縮後備份到/backup目錄下,備份的文件名爲"etc-日期-時間"的形式,

#!/bin/bash
#
Com=$1
[ -z /backup ] || mkdir /backup &> /dev/null //當無/backup時則創建
if [ -z $Com ];then
        Com=gzip
fi
if [ $Com == 'gzip' ];then
        tar zcf /backup/etc-`date +%F-%H:%M:%S.tar.gz` /etc/* &> /dev/null
        [ $? == 0 ] && echo "Backup etc finished.(gzip)."
elif [ $Com == 'bzip2' ];then
        tar jcf /backup/etc-`date +%F-%H:%M:%S.tar.bz2` /etc/* &> /dev/null
        [ $? == 0 ] && echo "Backup etc finished.(bz2)."
elif [ $Com == 'xz' ];then
        tar Jcf /backup/etc-`date +%F-%H:%M:%S.tar.xz` /etc/* &> /dev/null
        [ $? == 0 ] && echo "Backup etc finished.(xz)."
else
        echo "Usage:`basename $0` {[gzip|bzip2|xz]}"
        exit=7
fi

此腳本在centos5.8上不tar不能調用xz壓縮工具進行工做,man tar發現選項裏沒有「J」選項,但在centos 6.2上能正常工做,應該是tar版本問題。

相關文章
相關標籤/搜索