bash腳本編程之二作谭、條件判斷
條件判斷:
? ? 如果用戶不存在
? ? ? ? 添加用戶稽物,給密碼并顯示添加成功;
? ? 否則
? ? ? ? 顯示用戶已存在丢早,沒(méi)有添加
bash中如何實(shí)現(xiàn)條件判斷姨裸?
? ? 整數(shù)測(cè)試
字符測(cè)試
? ? 文件測(cè)試
條件測(cè)試的表達(dá)式:
? ? [expression]
? ? [[expression]]
? ? test expression
整數(shù)比較:
?-eq:測(cè)試兩個(gè)整數(shù)是否相等;比如 $A -eq $B
? ? -ne:測(cè)試兩個(gè)整數(shù)是否不等怨酝;不等傀缩,為真;相等农猬,為假赡艰;
? ? -qt:測(cè)試一個(gè)數(shù)是否大于另一個(gè)數(shù);大于為真斤葱;否則慷垮,為假;
? ? -lt:測(cè)試一個(gè)數(shù)是否小于另一個(gè)數(shù)揍堕;小于為真料身;否則,為假衩茸;
? ? -ge:大于或等于
? ? -le:小于或等于
命令間的邏輯關(guān)系:
?邏輯與:&&
?第一個(gè)條件為假時(shí)芹血,第二個(gè)條件不會(huì)再判斷,最終結(jié)果已經(jīng)有楞慈;
? ? ? ? 第二個(gè)條件為真時(shí)幔烛,第二個(gè)條件必須得判斷;
?邏輯或:||
如果用戶user2不存在囊蓝,就添加用戶 user2
饿悬!id user2 && useradd user2?
id user2 || useradd user2
變量名稱:${VARNAME},括號(hào)有時(shí)可省略
? ? 1、只能包含子母聚霜、數(shù)字和下劃線狡恬,并且不能數(shù)字開(kāi)頭珠叔;
? ? 2、不應(yīng)該跟系統(tǒng)中已有的系統(tǒng)變量重名傲宜;
? ? 3运杭、最好做到見(jiàn)名知意;
如果用戶user1存在函卒,就顯示用戶已存在辆憔;否則,就添加报嵌;
id user1 && echo "user1 exists." || useradd user1
如果用戶user1不存在虱咧,就添加;否則锚国,顯示其已經(jīng)存在腕巡;
! id user1 && useradd user1 || echo “user1 exists.”
如果用戶user1不存在,添加并且給密碼血筑;否則绘沉,顯示其已經(jīng)存在;
! id user1 && useradd user1 && echo "user1" | passwd --stdin user1 || echo "user1 exists."?
條件判斷豺总,控制結(jié)構(gòu):
單分支if語(yǔ)句
if 判斷條件; then
? statement1
? statement2
? ... ?
fi
雙分支if語(yǔ)句:
if 判斷條件; then
? statement1
? statement2
else
? statement3 ? ?
? statement4
? fi
bash腳本編程之三 條件判斷及算術(shù)運(yùn)算
練習(xí)一:寫一個(gè)腳本
判斷當(dāng)前系統(tǒng)上是否有用戶的默認(rèn)shell為bash车伞;如果有,就顯示有多少個(gè)這類用戶喻喳;否則另玖,就顯示沒(méi)有這類用戶;
#!/bin/bash
#
grep '\ /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
? USERS=` grep '\? echo "The shells of $USERS users is bash. "
else
?? echo "No such user."
fi
練習(xí)二:寫一個(gè)腳本
給定一個(gè)文件表伦,比如/etc/inittab
判斷這個(gè)文件中是否有空白行谦去;
如果有,則顯示其空白行數(shù)蹦哼;否則鳄哭,顯示沒(méi)有空白行。
#!/bin/bash
#
grep '\ /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
? USERS=` grep '\? echo "The shells of $USERS users is bash. "
else
?? echo "No such user."
fi
練習(xí)四:寫一個(gè)腳本
給定一個(gè)用戶纲熏,獲取其密碼警告期限窃诉;
而后判斷用戶最近一次修改密碼時(shí)間距是否已經(jīng)小于警告期限;
?提示:算術(shù)運(yùn)算的方法$[$A-$B]:表示變量A的值減去變量B的值的結(jié)果赤套;
?如果小于,則顯示”Warning“;否則珊膜,就顯示”O(jiān)K“.
?shell 中如何進(jìn)行算術(shù)運(yùn)算:
?A=3
?B=6
1容握、let 算術(shù)運(yùn)算表達(dá)式
?? ?let C=$A+$B
2、$[算術(shù)運(yùn)算表達(dá)式]
??? C=$[$A+$B]
3车柠、$((算術(shù)運(yùn)算表達(dá)式))
?? ?c=$(($A+$B))
4剔氏、expr 算術(shù)運(yùn)算表達(dá)式塑猖,表達(dá)式中各操作數(shù)及運(yùn)算符之間要有空格,而且要使用命令引用
?? ?c=`expr $A + $B`
#!/bin/bash
W=`grep "wolf" /etc/shadow | cut -d: -f6`
S=`date +%s`
T=`expr $S/86400`
L=`grep "wolf" /etc/shadow | cut -d: -f5`
N=`grep "wolf" /etc/shadow | cut -d: -f3`
SY=$[$L-$[$T-$N]]
if [ $SY -lt $W ]; then
?? echo "warning"
else
?? echo "OK"
fi
?練習(xí)五:寫一個(gè)腳本
?判定命令歷史中歷史命令的總條目是否大于1000谈跛;如果大于羊苟,則顯示”Some command will gone.“;否則顯示”O(jiān)K“;
#!/bin/bash
#
HI=`history | tail -1 | cut -d' ' -f2`
S=[ $HI -gt 100 ]
if [ $S -eq 0 ];? then
?? echo "Some command will gone."
else
?? echo "OK."
fi