您好,登錄后才能下訂單哦!
四 條件測試
test 測試條件 測試內容
[測試條件 測試內容] #用的更為廣泛
1 測試文件類型
test -e 文件名 測試文件是否存在,存在為真
[ -e 文件名 ] 注意:[]的左右兩側必須加空格!
附:test測試結果并不顯示,需用echo$? 來顯示test的返回值
返回0語句正確,非0表示不正確。
拓展:test-e test.txt && echo Yes || echo No
test -f 文件名 判斷是否是普通文件#如果是文件的話,返回0,若是目錄返回非0
test -d 文件名 判斷是否為目錄
test -b 文件名 判斷是否為塊設備文件
test -c 文件名 字符設備文件
2 測試文件權限
test -r 文件名 判斷是否有可讀權限
test -w 文件名 可寫
test -x 文件名 執行
test -s 文件名 判斷是否為非空白,有內容為真
3 兩個文檔比較
[file1 -nt file2 ] file1是否比file2新
[file1 -ot file2 ] file1是否比file2舊
[file1 -ef file2 ] file1與file2是否是鏈接文件,是否是快捷方式,軟鏈接
4 兩個數值之間判斷
[n1 -eq n2 ] n1和n2是否相等#推薦使用下面的 ==符號來判斷
測試:aa=123;bb=123
[$aa -eq $bb ] && echo Yes || echo no
[n1 -ne n2 ] n1和n2是否不等
[n1 -gt n2 ] n1大于n2
[n1 -lt n2 ] n1小于n2
[n1 -ge n2 ] n1大于等于n2
[n1 -le n2 ] n1小于等于n2
5 判斷字符串
[-z 字符串] 判斷字符串是否為空,變量值沒有內容/為空則是真
[字符串1 == 字符串2] 判斷字串1是否與字串2相等#判斷采用的是字符串型
[$aa == $bb ] && echo 1 || echo 2
附:aa=abc
[“$aa” == “abc” ] && echo Yes || echo No #為什么把兩個“”去掉測試也成功
[字符串1 != 字符串2] 判斷字串是否不等
6 多重判斷
-a 邏輯與
[-z $file -a -e $file ]
-o邏輯或
! 邏輯非
例子7:判斷輸入的文件類型和文件權限注:一定要練習
#!/bin/bash
echo-e "nide wenjian shifou cunzai? wenjian quanxian shi shenme?\n\n"
read-p "please input filename:" -t 30 filename
test-z $filename && echo "please input filename!!" &&exit 1
#判斷字符串是否為空,如果為空,打印錯誤信息,并且退出程序!
test! -e $filename && echo "wenjian bucunzai!" &&exit 2
#-e 變量 判斷文件是否存在,存在為真 ! 邏輯非
test-f $filename && filetype=putong
#-f 是否為普通文件
test-d $filename && filetype=mulu
#-d 是否為目錄
test-r $filename && perm="read"
#-r是否有可讀權限
test-w $filename && perm="$perm write"
#-w 是否可寫
test-x $filename && perm="$perm executable"
#-x 是否可執行
echo-e "the filename is : $filename \n"
#打印文件名
echo-e "filetype is : $filetype \n"
#打印文件類型
echo-e "permision is : $perm \n"
#打印文件權限
五 流程控制
1 if語句
1)if條件語句--單分支。當“條件成立”時執行相應的操作
格式:
if 條件測試命令
then 命令序列
fi
例子8:
如果/boot分區的空間使用超過80%,則輸出警告
#!/bin/bash
RATE=`df-hT | grep "/boot" | awk '{print $6}' | cut -d "%"-f1 ` #:反引號!!!
#:df命令:顯示分區使用狀況
if [ $RATE -gt 80 ]
then
echo"Warning,/boot DISK is full!"
fi
2)if條件語句--雙分支。當“條件成立”、“條件不成立”時執行不同操作
格式:
if 條件測試命令
then 命令序列1
else 命令序列2
fi
例子9:
判斷httpd服務是否啟動,如果沒有啟動則啟動
#!/bin/bash
http=`netstat-tlun | awk '{print $4 "\n"}' | grep ":80$"`
(或http=$(ps aux | grep httpd | grep -v grep))
附:netstat-tlun 用來查看系統啟動的所有端口
psaux 用來打印apache所有的進程
grep-v grep 把包含有grep的行取反
if [ -z "$http" ]
then
echo"httpd meiyou qidong!"
/etc/rc.d/init.d/httpdstart
else
echo"httpd runing"
fi
附:停掉Apache:servicehttpd stop
3) if條件語句--多分支
格式:
if 條件測試命令1 ; then
命令序列1
elif 條件測試命令2 ; then
命令序列2
elif ...
else
命令序列n
fi
例子10:
#判斷輸入的字符
#!/bin/bash
echo"if you want to beijing ,please input 1"
echo"if you want to shanghai ,please input 2"
echo"if you want to chengdu ,please input 3"
read-p "please input a num: " -t 30 num
if[ "$num" == "1" ]
then
echo"beijing!!!"
elif[ "$num" == "2" ]
then
echo"shanghai!!!!"
elif[ "$num" == "3" ]
then
echo"chengdu!!!"
else
echo"error,please input 1 or 2 or 3."
fi
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。