shell的條件測試,變量測試,表達(dá)式中的0和1,數(shù)值判斷,字符串判斷
條件測試
條件測試:判斷某需求是否滿足。若真,則狀態(tài)碼變量0; 返回若假,則狀態(tài)碼變量,返回1
條件測試命令
test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]]
注意:EXPRESSION前后必須有空白字符
變量測試
-v VAR 或者 [ -v VAR] 變量VAR是否設(shè)置
注: 變量的條件測試其實(shí)就是判斷變量是否定義
[root@zaishu ~]# unset a //重置變量,表示變量沒有被定義 [root@zaishu ~]# test -v a [root@zaishu ~]# echo $? 1
[root@zaishu ~]# a=1 //變量已定義 [root@zaishu ~]# test -v a [root@zaishu ~]# echo $? //所以判斷為真 0
[root@zaishu ~]# a='' [root@zaishu ~]# test -v a [root@zaishu ~]# echo $? 0
[root@zaishu ~]# a="" [root@zaishu ~]# test -v a [root@zaishu ~]# echo $? 0
[root@zaishu ~]# [ -v b ] [root@zaishu ~]# echo $? 1
[root@zaishu ~]# [ -v a ] [root@zaishu ~]# echo $? 0
表達(dá)式中的0或1
表達(dá)式中的數(shù)字0或1,并不代表真假,每個(gè)表達(dá)式執(zhí)行完,退出的時(shí)候,都會(huì)返回一個(gè)退出狀態(tài)碼。if語句根據(jù) [ ] 表達(dá)式執(zhí)行的退出狀態(tài)碼進(jìn)行判斷,在所有的退出狀態(tài)碼中,0表示執(zhí)行成功,其他退出狀態(tài)碼都為假。這是與C語言不同的。
[root@zaishu sh]# cat tru.sh #!/bin/bash if [ 1 ]; //這其實(shí)返回值是為0,為真 then echo 'ok'; fi [root@zaishu sh]# ./tru.sh [root@zaishu sh]# ok
[root@zaishu sh]# cat tru.sh #!/bin/bash if [ 0 ]; //這其實(shí)返回值是為0,為真 then echo 'ok'; fi [root@zaishu sh]# ./tru.sh [root@zaishu sh]# ok
數(shù)值測試
-gt 是否大于 -ge 是否大于等于 -eq 是否等于 -ne 是否不等于 -lt 是否小于 -le 是否小于等于
[root@zaishu sh]# a=1 [root@zaishu sh]# b=2 [root@zaishu sh]# [ $a -lt $b ] [root@zaishu sh]# echo $? 0 [root@zaishu sh]# [ $a -gt $b ] [root@zaishu sh]# echo $? 1
[root@zaishu sh]# cat num.sh #!/bin/bash a=30 b=20 if [ $a != $b ] then echo "$a !=$b:a != b" else echo "$a !=$b:a = b" fi if [ $a -lt 100 -a $b -gt 15 ] then echo "$a 小于 100 且 $b 大于 15 : 返回 true" else echo "$a 小于 100 且 $b 大于 15 : 返回 false" fi if [ $a -lt 100 -o $b -gt 100 ] then echo "$a 小于 100 或 $b 大于 100 : 返回 true" else echo "$a 小于 100 或 $b 大于 100 : 返回 false" fi if [ $a -lt 5 -o $b -gt 100 ] then echo "$a 小于 5 或 $b 大于 100 : 返回 true" else echo "$a 小于 5 或 $b 大于 100 : 返回 false" fi
[root@zaishu sh]# ./num.sh 30 !=20:a != b 30 小于 100 且 20 大于 15 : 返回 true 30 小于 100 或 20 大于 100 : 返回 true 30 小于 5 或 20 大于 100 : 返回 false
字符串測試
- 常見比較符
-z "STRING" 字符串是否為空,空為真,不空為假 -n "STRING" 字符串是否不空,不空為真,空為假 = 是否等于 != 是否不等于 > ascii碼是否大于ascii碼 < 是否小于 == 左側(cè)字符串是否和右側(cè)的PATTERN相同 注意:此表達(dá)式用于[[ ]]中,PATTERN為通配符 =~ 左側(cè)字符串是否能夠被右側(cè)的PATTERN所匹配 注意: 此表達(dá)式用于[[ ]]中;擴(kuò)展的正則表達(dá)式
單引號(hào)和雙引號(hào)的區(qū)別
對類型來說是無關(guān)的。
單引號(hào)不對相關(guān)量進(jìn)行替換,如不對$符號(hào)解釋成變量引用,從而用對應(yīng)變量的值替代,雙引號(hào)則會(huì)進(jìn)行替代。字符匹配示例
[root@zaishu sh]# unset str [root@zaishu sh]# [ -z "str" ] //為空,所以表達(dá)式返回值為真 [root@zaishu sh]# echo $? 0 [root@zaishu sh]# unset str [root@zaishu sh]# [ -z "str" ] [root@zaishu sh]# echo $? 1 [root@zaishu sh]# [ -z "$str" ] [root@zaishu sh]# echo $? 0 [root@zaishu sh]# str="" [root@zaishu sh]# [ -z "$str" ] [root@zaishu sh]# echo $? 0 [root@zaishu sh]# str=" " [root@zaishu sh]# [ -z "$str" ] [root@zaishu sh]# echo $? 1 [root@zaishu sh]# [ -n "$str" ] [root@zaishu sh]# echo $? 0 [root@zaishu sh]# str=zaishu [root@zaishu sh]# [ "$str" ] [root@zaishu sh]# echo $? 0 [root@zaishu sh]# str1=zaishu [root@zaishu sh]# str2=shuge [root@zaishu sh]# [ "$str1" = "str2" ] [root@zaishu sh]# echo $? 1 [root@zaishu sh]# str2=zaishu [root@zaishu sh]# [ "$str1" = "$str2" ] [root@zaishu sh]# echo $? 0
[root@zaishu sh]# cat str.sh #!/bin/sh str1="abc" str2="abc" str3="" echo "輸入的原始值:str1=$str1,str2=$str2" #判斷字符串是否相等 if [ "$str1" = "$str2" ];then echo "$str1 = $str2" fi echo "在[]中==與=等價(jià)" if [ "$str1" == "$str2" ];then echo "$str1 == $str2" fi #字符串不相等 if [ "$str1" != "$str2" ];then echo "[ != ]" fi #字符串不相等 if [[ "$str1" != "$str2" ]];then echo "[[ != ]]" fi #字符串不為空,長度不為0 if [ -n "$str1" ];then echo "不為空" fi #字符串為空.就是長度為0. if [ -z "$str3" ];then echo "str3長度為0,為空" fi
[root@zaishu sh]# ./str.sh 輸入的原始值:str1=abc,str2=abc abc = abc 在[]中==與=等價(jià) abc == abc 不為空 str3長度為0,為空
- 模式匹配
[root@zaishu sh]# file=shuge.log [root@zaishu sh]# [[ "$file" == *.log ]] [root@zaishu sh]# echo $? 0 [root@zaishu sh]# [[ "$file" == *.txt ]] [root@zaishu sh]# echo $? 1 [root@zaishu sh]# [[ "$file" != *.txt ]] [root@zaishu sh]# echo $? 0
[root@zaishu sh]# cat str.sh #!/bin/sh str3="def" echo "==的功能在[[]]和[]中的行為是不同的" #如果$str3以”d”開頭(模式匹配)那么將為true if [[ "$str3" == d* ]];then echo "str3是以d開頭的" fi #如果$str3在進(jìn)行字符匹配時(shí)候,結(jié)果為false if [ "$str3" == d* ];then echo "==/"d*/"" fi if [[ "$str3" == "d*" ]];then echo "==/"d*/"" fi #結(jié)果為true if [[ "$str3" = d* ]];then echo "=/"d*/"" fi
[root@zaishu sh]# ./str.sh #==的功能在[[]]和[]中的行為是不同的 #str3是以d開頭的 #=/d*/
- 正則表達(dá)式匹配
[root@zaishu sh]# [[ "$file" =~ \txt$ ]] [root@zaishu sh]# echo $? 1
[root@zaishu sh]# [[ "$file" =~ \log$ ]] //字符串是以log結(jié)尾 [root@zaishu sh]# echo $? 0
[root@zaishu sh]# num=10 [root@zaishu sh]# [[ "$num" =~ ^[0-9]+$ ]] [root@zaishu sh]# echo $? 0
[root@zaishu sh]# str=a10 [root@zaishu sh]# [[ "$str" =~ ^[0-9]+$ ]] [root@zaishu sh]# echo $? 1
[root@zaishu sh]# ip=10.11.12.13 [root@zaishu sh]# [[ "$ip" =~ ^([0-9]{1,3}.){3}[0-9]{1,3}$ ]] //用于匹配IP [root@zaishu sh]# echo $? 0
總結(jié)
到此這篇關(guān)于shell的條件測試,變量測試,表達(dá)式中的0和1,數(shù)值判斷,字符串判斷的文章就介紹到這了,更多相關(guān)shell 條件測試,變量測試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux定時(shí)執(zhí)行任務(wù)at和crontab命令詳解
本篇文章主要介紹了Linux定時(shí)執(zhí)行任務(wù)at和crontab命令這兩個(gè)命令的基本用法和區(qū)別,一起學(xué)習(xí)下。2017-11-11Linux通過命令壓縮與解壓縮的方法| tar, tar.gz, tar.bz2
這篇文章主要介紹了Linux通過命令壓縮與解壓縮的方法| tar, tar.gz, tar.bz2,內(nèi)容囊括了打包、壓縮、解壓縮的基本概念,最后通過實(shí)例講解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-04-04linux shell實(shí)現(xiàn)判斷輸入的數(shù)字是否為合理的浮點(diǎn)數(shù)
這篇文章主要介紹了linux shell實(shí)現(xiàn)判斷輸入的數(shù)字是否為合理的浮點(diǎn)數(shù),需要的朋友可以參考下2016-08-08scp 將數(shù)據(jù)從一臺(tái)linux服務(wù)器復(fù)制到另一臺(tái)linux服務(wù)器
這篇文章主要介紹了scp 將數(shù)據(jù)從一臺(tái)linux服務(wù)器復(fù)制到另一臺(tái)linux服務(wù)器,需要的朋友可以參考下2017-09-09shell學(xué)習(xí)之printf命令格式化輸出語句
printf命令模仿C程序庫(library)里的printf()庫程序(library routine)。它幾乎復(fù)制了該函數(shù)的所有功能。不過在Shell層級(jí)的版本上,會(huì)有些差異。下面這篇文章就給大家主要介紹了shell中printf命令格式化輸出語句的相關(guān)資料,需要的朋友可以參考下。2017-01-01統(tǒng)計(jì)網(wǎng)卡流量的兩段shell腳本(使用ifconfig)
一個(gè)很小巧的shell腳本,使用ifconfig的不間斷輸出來統(tǒng)計(jì)網(wǎng)卡的流量,有需要的朋友可以參考下2013-02-02Shell中的for和while循環(huán)詳細(xì)總結(jié)
這篇文章主要介紹了Shell中的for和while循環(huán)詳細(xì)總結(jié),本文講解了for循環(huán)的數(shù)字段形式、詳細(xì)列出、對文件進(jìn)行循環(huán),while循環(huán)的三種使用場合等內(nèi)容,需要的朋友可以參考下2015-05-05ssh遠(yuǎn)程執(zhí)行命令方法和Shell腳本實(shí)例
這篇文章主要介紹了ssh遠(yuǎn)程執(zhí)行命令方法和Shell腳本實(shí)例,本文講解了ssh執(zhí)行遠(yuǎn)程操作方法和遠(yuǎn)程執(zhí)行命令shell腳本示例,需要的朋友可以參考下2015-04-04