shell中if條件判斷的實(shí)現(xiàn)
1、if 的基本語(yǔ)法:
if [ command ];then 符合該條件執(zhí)行的語(yǔ)句 elif [ command ];then 符合該條件執(zhí)行的語(yǔ)句 else 符合該條件執(zhí)行的語(yǔ)句 fi
2、字符串的判斷
字符串批較時(shí),變量一定要用 雙引號(hào)
。
[ -z "str" ] 如果str的長(zhǎng)度為零,則為真 ,即判斷是否為空,空即是真;
[ -n "str" ] 如果str的長(zhǎng)度非零,則為真 ,即判斷是否為非空,非空即是真;
[ "str1" = "str2" ] 如果兩個(gè)字符串相同,則為真;
[ "str1" != "str2" ] 如果字符串不相同,則為真;
[ "str1" ] 如果字符串不為空,則為真,與-n類似。
示例:
if [ -z "$path" ]; then echo "head 請(qǐng)指定 path 的值" 1>&2 fi if [ "$opt" != "-" ]&&[ "$opt" != "+" ]; then echo "opt只能取值-或+" 1>&2 exit 1; fi
3、數(shù)值的判斷
數(shù)值的比較千萬(wàn)不要使用大于號(hào)、小于號(hào),數(shù)值的比較只能使用 -eq
、-gt
等。
[ num1 -eq num2 ] num1 和 num2 兩數(shù)相等為真 , =
[ num1 -ne num2 ] num1 和 num2 兩數(shù)不等為真 ,!=
[ num1 -gt num2 ] num1 大于 num1 為真 , >
[ num1 -ge num2 ] num1 大于等于num2 為真, >=
[ num1 -lt num2 ] num1 小于n um2 為真 , <
[ num1 -le num2 ] num1 小于等于 num2 為真, <=
示例:
if [ ${num1} -gt ${num2} ]; then echo "[相對(duì)目錄](méi)的長(zhǎng)度應(yīng)該小于[文件路徑]的長(zhǎng)度" exit 1 fi
4、文件和目錄的判斷
[ -e file ] 如果 file 存在,則為真。
[ -d DIR ] 如果 file 存在,且是一個(gè)目錄,則為真。
[ -f file ] 如果 file 存在,且是一個(gè)普通文件,則為真。[ -r file ] 如果 file 存在且是可讀的,則為真。
[ -w file ] 如果 file存在且是可寫的,則為真。
[ -x file ] 如果 file 存在且是可執(zhí)行的,則為真。[ -b file ] 如果 file 存在,且是一個(gè)塊特殊文件,則為真。
[ -c file ] 如果 file 存在,且是一個(gè)字特殊文件,則為真。[ -g file ] 如果 file 存在且已經(jīng)設(shè)置了SGID,則為真。
[ -k file ] 如果 file 存在且已經(jīng)設(shè)置了粘制位,則為真。
[ -p file ] 如果 file 存在且是一個(gè)名字管道(F如果O),則為真。[ -s file ] 如果 file 存在且大小不為0,則為真。
[ -t FD ] 如果文件描述符 FD 打開且指向一個(gè)終端,則為真。
[ -u file ] 如果 file 存在且設(shè)置了SUID (set user ID),則為真。[ -O file ] 如果 file 存在且屬有效用戶ID,則為真。
[ -G file ] 如果 file 存在且屬有效用戶組,則為真。
[ -L file ] 如果 file 存在且是一個(gè)符號(hào)連接,則為真。
[ -N file ] 如果 file 存在 and has been mod,如果ied since it was last read則為真。
[ -S file ] 如果 file 存在且是一個(gè)套接字,則為真。
[ file1 -ot file2 ] 如果 file1 比 file2 要老, 或者 file2 存在且 file1 不存,在則為真。
[ file1 -ef file2 ] 如果 file1 和 file2 指向相同的設(shè)備和節(jié)點(diǎn)號(hào),則為真。
5、復(fù)雜邏輯判斷
操作 | 說(shuō)明 |
---|---|
-a | 與 |
-o | 或 |
! | 非 |
示例1:與
的使用
如果a>b 且 a< c
if (( a > b )) && (( a < c ))
或者
if [[ $a > $b ]] && [[ $a < $c ]]
或者
if [ $a -gt $b -a $a -lt $c ]
另外,“||“和”&&” 在 shell 里可以用,如下所示:
if [ a>b && a < c ]
示例2:或
的使用
如果a>b或a < c
if (( a > b )) || (( a < c ))
或者
if [[ $a > $b ]] || [[ $a < $c ]]
或者
if [ $a -gt $b -o $a -lt $c ]
另外,“||“和”&&” 在 shell 里可以用,如下所示:
if [ a>b || a < c ]
5、舉例
#!/bin/bash #echo -n "please input your score:" #read score #echo "input score is $ score " read -p "please input a score:" score echo -e "your score [$score] is judging by sys now" if [ "$score" -ge "0" ]&&[ "$score" -lt "60" ];then echo "sorry,you are lost!" elif [ "$score" -ge "60" ]&&[ "$score" -lt "85" ];then echo "just soso!" elif [ "$score" -le "100" ]&&[ "$score" -ge "85" ];then echo "good job!" else echo "input score is wrong , the range is [0-100]!" fi
6、條件變量替換:
Bash Shell可以進(jìn)行變量的條件替換,既只有某種條件發(fā)生時(shí)才進(jìn)行替換,替換條件放在 {}
中.
(1) ${value:-word}
當(dāng)變量未定義或者值為空時(shí),返回值為word的內(nèi)容,否則返回變量的值。
(2) ${value:=word}
與前者類似,只是若變量未定義或者值為空時(shí),在返回word的值,同時(shí)將word賦值給value
(3) ${value:?message}
若變量以賦值的話,正常替換。否則,將消息message送到標(biāo)準(zhǔn)錯(cuò)誤輸出。(若此替換出現(xiàn)在Shell程序中,那么該程序?qū)⒔K止運(yùn)行)
(4) ${value:+word}
若變量以賦值的話,其值才用word替換,否則,不進(jìn)行任何替換。
(5) ${value:offset}
, ${value:offset:length}
從變量中提取子串,這里 offset 和 length 可以是算術(shù)表達(dá)式。length 不指定時(shí),默認(rèn)為從offset 開始到結(jié)尾的長(zhǎng)度。
path="C:\Users\admin\AppData\Roaming" echo ${path:4} 結(jié)果是 sers/admin/AppData/Roaming path="C:\Users\admin\AppData\Roaming" echo ${path:0:2} 結(jié)果是 C: path="C:\Users\admin\AppData\Roaming" echo ${path:0-7} Roaming
(6) ${#value}
變量的字符個(gè)數(shù),長(zhǎng)度。
(7) ${value#pattern}
, ${value##pattern}
去掉 value 中與 pattern 相匹配的部分,條件是value的開頭與pattern相匹配, #
與 ##
的區(qū)別在于一個(gè)是最短匹配模式 ,一個(gè)是最長(zhǎng)匹配模式。
(8) ${value%pattern}
, ${value%%pattern}
于(7)類似,只是是從value的尾部于pattern相匹配, %
與 %%
的區(qū)別與 #
與 ##
一樣
(9) ${value/pattern/string}
, ${value//pattern/string}
進(jìn)行變量?jī)?nèi)容的替換,把與pattern匹配的部分替換為string的內(nèi)容, /
與 //
的區(qū)別與上同。
path="C:\Users\admin\AppData\Roaming" path=${path//'\'//} echo $path
輸入結(jié)果是
C:/Users/admin/AppData/Roaming
到此這篇關(guān)于shell中if條件判斷的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)shell if條件判斷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
通過(guò)shell腳本對(duì)mysql的增刪改查及my.cnf的配置
這篇文章主要介紹了通過(guò)shell腳本對(duì)mysql的增刪改查及my.cnf的配置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07Shell特殊變量(Shell $#、$*、$@、$?、$$)的使用
這篇文章主要介紹了Shell特殊變量(Shell $#、$*、$@、$?、$$)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03