標籤:程式 判別式
條件判斷式
只要講到程式的話,那麼條件判斷式,亦即是if then這種判別式肯定一定要學習的,另外一種是case...esac
if....then
這個是if...then 是最常見的條件判斷式了,它分為單分支條件判斷式,雙分支條件判斷式,多分支條件判斷式
單分支條件判斷語句:
if [ 條件判斷式 ]
then
輸出內容
fi
雙分支條件判斷式:
if [ 條件判斷式 ]
then
輸出內容
else
輸出內容
fi
多分支條件判斷式
if [ 條件判斷式 ]
then
輸出內容
elif [ 條件判斷式 ]
then
輸出內容
else
輸出內容
fi
對於條件判斷式裡面的對比常見的有3種方式,分別是數值對比、字元對比、檔案對比
數值對比:
整數對比
-eq:測試兩個整數是否相等,比如$A -eq $B
-ne:測試兩個整數是否不等:不等,為真:相等,為假
-gt:測試一個數是否大於另一個數:大於,為真:否則,為假
-lt:測試一個數是否小於另一個數:小於,為真:否則,為假
-ge:大於或等於
-le:小於或等於
字元對比:
STRING1 = STRING2 :表示字元相等
STRING1 != STRING2:表示字元不相等
檔案對比:
-e:表示檔案是否存在
-f:表示檔案存在且是一個普通檔案
##還有很多選項,以上兩個是比較常用的
練習:寫一個指令碼
判斷當前系統上是否有使用者預設shell為bash:
如果有,就顯示有多少個這類使用者:否則,就顯示沒有這類使用者
[[email protected]_2 ~]# cat ba.sh
#!/bin/bash
bashuser=`grep "\<bash\>" /etc/passwd |cut -d":" -f 1`
if [ $? -eq 0 ];then
echo "以下使用者擁有bash:"
echo "${bashuser}"
else
echo "沒有使用者擁有bash"
fi
練習:寫一個指令碼
給定一個檔案,比如/etc/inittab
判斷這個檔案中是否有空白行
如果有,則顯示其空白行數:否則,顯示沒有空白行
[[email protected]_2 ~]# cat hang.sh
#!/bin/bash
hang=`grep ‘^$‘ /etc/inittab |wc -l`
if [ ! $? -eq 0 ];then
exit 8
fi
if [ $hang -gt 0 ];then
echo "有${hang}行空白行"
else
echo "沒有空白行"
fi
練習:寫一個指令碼
給定一個使用者,判斷其UID與GID是否一樣
如果一樣,就顯示此使用者為"good guy":否則,就顯示此使用者為"bad guy"
[[email protected]_2 ~]# cat ug.sh
#!/bin/bash
useruid=`id -u "[email protected]" 2>/dev/null`
if [ ! $? -eq 0 ];then
echo "請傳入正確的使用者"
exit 9
fi
usergid=`id -g "[email protected]" 2>/dev/null`
if [ ! $? -eq 0 ];then
echo "請傳入正確的使用者"
exit 9
fi
if [ $# -eq 1 ];then
if [ $useruid -eq $usergid ];then
echo "good guy"
echo "${1}的UID和GID"
else
echo "bad guy"
fi
else
echo "請傳入正確的參數"
fi
練習:寫一個指令碼
判定命令曆史中曆史命令的總條數是否大於1000,:如果大於,則顯示"Some command will gone":否則顯示"ok"。
[[email protected]_2 ~]# cat his.sh
#!/bin/bash
#
his=`history |wc -l 2>/dev/null`
if [ $his -gt 1000 ];then
echo "Some command will gone"
else
echo "ok"
fi
case....esac判斷
文法
case 變數名稱 in
值一)
輸出資訊
;;
值二)
輸出資訊
;;
*)
輸出資訊
;;
esac
#一般常用於傳參
本文出自 “常想一二” 部落格,請務必保留此出處http://250919938.blog.51cto.com/962010/1918592
shell條件判斷