一、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版本問題。