1. 按文件類型判斷
測試選項(xiàng) 作用
-b 文件 判斷該文件是否存在揪荣,并且是否為塊設(shè)備文件(是塊設(shè)備為真)
-c 文件 判斷該文件是否存在蝙寨,并且是否為字符設(shè)備(是字符設(shè)備文件為真)
-d 文件 判斷該文件是否存在逝变,并且是否為目錄文件(是目錄為真)
-e 文件 判斷該文件是否存在(存在為真)
-f 文件 判斷該文件是否存在现横,并且是否為普通文件(是普通文件為真)
-L 文件 判斷該文件是否存在,并且是否為符號(hào)鏈接文件(是符號(hào)鏈接文件為真)
-p 文件 判斷該文件是否存在乌企,并且是否為管道文件(是管道文件為真)
-s 文件 判斷該文件是否存在虑润,并且是否為非空(非空為真)
-S 文件 判斷該文件是否存在,并且是否為套接字文件(是套接字文件為真)
兩種判斷格式
test -e /root/install.log
[ -e /root/install.log ]
例:
[ -e /root/install.log ] && echo yes || echo no
2. 按文件權(quán)限進(jìn)行判斷
測試選項(xiàng) 作用
-r 文件 判斷該文件是否存在加酵,并且是否該文件擁有讀權(quán)限(有讀權(quán)限為真)
-w 文件 判斷該文件是否存在拳喻,并且是否該文件擁有寫權(quán)限(有寫權(quán)限為真)
-x 文件 判斷該文件是否存在,并且是否該文件擁有執(zhí)行權(quán)限(有執(zhí)行權(quán)限為真)
-u 文件 判斷該文件是否存在猪腕,并且是否該文件擁有SUID權(quán)限(有SUID權(quán)限為真)
-g 文件 判斷該文件是否存在撒犀,并且是否該文件擁有SGID權(quán)限(有SGID權(quán)限為真)
-k 文件 判斷該文件是否存在霎褐,并且是否該文件擁有SBIT權(quán)限(有SBIT權(quán)限為真)
3. 兩個(gè)文件之間進(jìn)行比較
測試選項(xiàng) 作用
文件1 -nt 文件2 判斷文件1的修改時(shí)間是否比文件2的新(新為真)
文件1 -ot 文件2 判斷文件1的修改時(shí)間是否比文件2的舊(舊為真)
文件1 -ef 文件2 判斷文件1是否和文件2的inode號(hào)一直氧卧,可以理解為兩個(gè)文件是否為
同一個(gè)文件救拉。這個(gè)判斷用于判斷硬鏈接是很好的方法
4. 兩個(gè)整數(shù)之間比較
測試選項(xiàng) 作用
整數(shù)1 -eq 整數(shù)2 判斷整數(shù)1是否和整數(shù)2相等(相等為真)
整數(shù)1 -ne 整數(shù)2 判斷整數(shù)1是否和整數(shù)2不相等(不相等為真)
整數(shù)1 -gt 整數(shù)2 判斷整數(shù)1是否大于整數(shù)2(大于為真)
整數(shù)1 -lt 整數(shù)2 判斷整數(shù)1是否小于整數(shù)2(小于為真)
整數(shù)1 -ge 整數(shù)2 判斷整數(shù)1是否大于等于整數(shù)2(大于等于為真)
整數(shù)1 -le 整數(shù)2 判斷整數(shù)1是否小于等于整數(shù)2(小于等于為真)
5. 字符串的判斷
測試選項(xiàng) 作用
-z 字符串 判斷字符串是否為空(為空返回真)
-n 字符串 判斷字符串是否為非空(非空返回真)
字符串1 == 字符串2 判斷字符串1是否和字符串2相等(相等返回真)
字符串1 !== 字符串2 判斷字符串1是否和字符串2不相等(不相等返回真)
6. 多重條件判斷
測試選項(xiàng) 作用
判斷1 -a 判斷2 邏輯與腐缤,判斷1和判斷2都成立捌归,最終的結(jié)果為真
判斷1 -o 判斷2 邏輯或,判斷1和判斷2有一個(gè)成立岭粤,最終的結(jié)果就為真
惜索!判斷 邏輯非,是原始的判斷式取反
單分支if條件語句
if [ 條件判斷式 ]绍在;then
程序
fi
或者
if [ 條件判斷式 ]
then
程序
fi
單分支條件語句需要注意幾個(gè)點(diǎn)
1. if語句使用fi結(jié)尾门扇,和一般語句使用大括號(hào)結(jié)尾不同
2. [ 條件判斷式 ] 就是使用test命令判斷,所以中括號(hào)和條件判斷式之間必須有空格
3. then后面跟符合條件之后執(zhí)行的程序偿渡,可以放在[]之后臼寄,用“;”分割吉拳,也可以換行寫入适揉,就不想要“嫉嘀;”了
例1: 判斷登錄的用戶是否是root
#剪侮!/bin/bash
test = $( env | grep "USER" | cut -d "=" -f 2)
if [ "$test" == root ]
then
echo "current user is root"
fi
例2: 判斷分區(qū)使用率
#杰标!/bin/bash
rate = $(df -h | grep "dev/sda1" | awk '{print $5}' | cut -d '%' -f 1)
if [ $rate -ge 80 ]
then
echo "warning ! /dev/sda1 is full"
fi
2. 雙分支if條件語句
if [ 條件判斷式 ]
then
條件成立時(shí)腔剂,執(zhí)行的程序
else
條件不成立時(shí)掸犬,執(zhí)行另一個(gè)程序
fi
例1 : 判斷輸入的是否是一個(gè)目錄
#登渣!/bin/bash
read -t 30 -p "please input a diretory " dir
if [ -d $dir ]
then
echo "yes"
else
echo "no"
fi
例2: 判斷apache 是否啟動(dòng)
#胜茧!/bin/bash
test = $(ps aux | grep httpd } grep -v grep)
if [ -n "$test" ]
then
echo "$(date) httpd is ok !">>/tmp/acc.log
else
/etc/rc,d/init.d/httpd start &> /dev/null
echo "$(date) restart httpd! " >> err.log
fi
3. 多分支if條件語句
if [ 條件判斷式1 ]
then
當(dāng)條件判斷式1成立時(shí)仇味,執(zhí)行程序1
elif [ 條件判斷式2 ]
then
當(dāng)條件判斷式2成立時(shí)丹墨,執(zhí)行程序2
else
當(dāng)所有條件都不成立時(shí),最后執(zhí)行此程序
fi
例: 計(jì)算器
#喉前!/bin/bash
read -t 30 -p "please input first num : " firstnum
read -t 30 -p "please input last num : " lastnum
read -t 30 -p "please input your operation : " operation
if [ -n "$firstnum" -a -n "$lastnum" -a -n "$operation" ]
then
judgefirstnum = $( echo $firstnum | sed 's/[0-9]//g')
judgelastnum = $( echo $lastnum | sed 's/[0-9]//g')
if [ -z "$jugefirstnum" -a -z "$judgelastnum " ]
then
if [ "$operation" == "+" ]
then
sum = $(( $firstnum+$lastnum ))
elif [ "$operation" == "-" ]
then
sum = $(( $firstnum-$lastnum ))
elif [ "$operation" == "*" ]
then
sum = $(( $firstnum*$lastnum ))
elif [ "$operation" == "/" ]
then
sum = $(( $firstnum/$lastnum ))
else
echo "please enter a valid value"
exit
fi
echo $firstnum $operation $lastnum "=" $sum
else
echo "please enter valid value 2"
exit
if
else
echo "please enter valid value 3"
fi
例: 判斷用戶輸入的是什么文件
#裕便!/bin/bash
read -t 30 -p "please input a file name " file
if [ -z "$file" ]
then
echo "error please input a filename"
exit 11
elif [ -e "$file" ]
then
echo "your input is not a file"
exit 12
elif [ -f "$file" ]
then
echo "$file is a regulare file"
elif [ -d "$file" ]
then
echo "$file is a disectory"
else
echo "$file is an other file"
fi
多分支case條件語句
case語句和if...elif...else語句一樣都是多分支條件語句改览,不過和if多分支條件語句不同的事宝当,case語句只能判斷一種條件關(guān)系庆揩,而if語句可以判斷多種條件關(guān)系
case $變量名 in
"值1")
如果變量值等于1盾鳞,則執(zhí)行程序1
;;
"值2")
如果變量值等于2,則執(zhí)行程序2
;;
*)
如果變量值都不是以上的值,則執(zhí)行此程序
;;
esac
例:
#推励!/bin/bash
read -t 30 -p "please choose yes/no" cho
case $cho in
"yes")
echo "your choose is yes"
;;
"no")
echo "your choose is no"
;;
*)
echo "your choose is yes"
;;
esac
for 循環(huán)
語法1
for 變量 in 值1 值2 值3
do
程序
done
例:
#!/bin/bash
for i in 1 2 3 4 5
do
echo $i
done
#!/bin/bash
cd /root/test
ls *.tar.gz >ls.log
for i in $(cat ls.log)
do
tar -zxvf $i &> /dev/null
done
rm -rf ls.log
語法2
for (( 初始值验辞;循環(huán)控制條件;變量變化 ))
do
程序
done
例:
#跌造!/bin/bash
s=0
for (( i=1; i<100; i=i+1 ))
do
s=$(( $s+$i ))
done
例:批量添加數(shù)量的用戶
#!/bin/bash
read -t 30 -p "please input user name " name
read -t 30 -p "please input the number of users " num
read -t 30 -p "please input the password of users " pass
if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ]
then
y=$(echo $num | sed 's/[0-9]//g')
if [ -z "$y" ]
then
for (( i=1; i<=$num ; i=i+1 ))
do
/usr/sbin/useradd $name$i &> /dev/null
echo $pass | /usr/bin/paswd --stdin $name$i &>/dev/null
done
fi
fi
例: 刪除所有用戶
#!/bin/bash
for i in $(cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1 )
do
userdel -r $i
done
while循環(huán)
while循環(huán)是不定循環(huán)壳贪,也稱作條件循環(huán)陵珍。只要條件判斷式成立,循環(huán)就會(huì)一直繼續(xù)违施,知道條件判斷式不成立,循環(huán)才會(huì)停止磕蒲。這就和for的固定循環(huán)不太一樣了。
while [ 條件判斷式 ]
do
程序
done
例:
#!/bin/bash
i=1
s=0
while [ $i -le 100 ]
do
s=$(( $s+$i ))
i=$(( $i+1 ))
done
echo "the num is $s"
until循環(huán)
untile循環(huán)钻哩,和while循環(huán)相反屹堰,until循環(huán)時(shí)只要條件判斷式不成立則進(jìn)行循環(huán),并執(zhí)行循環(huán)程序珊肃,一旦循環(huán)條件成立荣刑,則終止循環(huán)
until [ 條件判斷式 ]
do
程序
done
例:
#!/bin/bash
i=1
s=0
until [ $i -gt 100 ]
do
s=$(( $s+$i ))
i = $(( $i +1 ))
done
echo "the sum is : $s"
shell編程之條件判斷與流程控制
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門疯暑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來训柴,“玉大人,你說我怎么就攤上這事妇拯』媚伲” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵越锈,是天一觀的道長宣赔。 經(jīng)常有香客問我,道長瞪浸,這世上最難降的妖魔是什么儒将? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮对蒲,結(jié)果婚禮上钩蚊,老公的妹妹穿的比我還像新娘贡翘。我一直安慰自己,他們只是感情好砰逻,可當(dāng)我...
- 文/花漫 我一把揭開白布鸣驱。 她就那樣靜靜地躺著,像睡著了一般蝠咆。 火紅的嫁衣襯著肌膚如雪踊东。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼记某,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了构捡?” 一聲冷哼從身側(cè)響起液南,我...
- 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勾徽,沒想到半個(gè)月后贺拣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡捂蕴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年譬涡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啥辨。...
- 正文 年R本政府宣布级乍,位于F島的核電站舌劳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏玫荣。R本人自食惡果不足惜甚淡,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捅厂。 院中可真熱鬧贯卦,春花似錦资柔、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至啡彬,卻和暖如春羹与,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背庶灿。 一陣腳步聲響...
- 正文 我出身青樓诡渴,卻偏偏與公主長得像捐晶,于是被迫代替她去往敵國和親菲语。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 1. 條件判斷式語句 -d -d -f 為常用 推薦使用[-e /root/install.log] 邏輯與"&&...
- 條件判斷與流程控制 條件判斷式 按照文件類型進(jìn)行判斷 按照文件權(quán)限進(jìn)行判斷 兩個(gè)文件之間進(jìn)行比較 兩個(gè)整數(shù)之間比較...
- 今天拿起放了有一段時(shí)間的(刻意練習(xí))惑灵,心底一直在有一個(gè)聲音提醒自己山上,在自控力的讀寫訓(xùn)練中,其實(shí)最大的部分應(yīng)該是看書...