二、文件/文件夾(目錄)判斷[ -b FILE ] 如果 FILE 存在且是一個(gè)塊特殊文件則為真。[ -c FILE ] 如果 FILE 存在且是一個(gè)字特殊文件則為真。[ -d DIR ] 如果 FILE 存在且是一個(gè)目錄則為真。[ -e FILE ] 如果 FILE 存在則為真。[ -f FILE ] 如果 FILE 存在且是一個(gè)普通文件則為真。[ -g FILE ] 如果 FILE 存在且已經(jīng)設(shè)置了SGID則為真。[ -k FILE ] 如果 FILE 存在且已經(jīng)設(shè)置了粘制位則為真。[ -p FILE ] 如果 FILE 存在且是一個(gè)名字管道(F如果O)則為真。[ -r FILE ] 如果 FILE 存在且是可讀的則為真。[ -s FILE ] 如果 FILE存在且大小不為0則為真。[ -t FD ] 如果文件描述符 FD 打開且指向一個(gè)終端則為真。[ -u FILE ] 如果 FILE 存在且設(shè)置了SUID (set user ID)則為真。[ -w FILE ] 如果 FILE存在且是可寫的則為真。[ -x FILE ] 如果 FILE 存在且是可執(zhí)行的則為真。[ -O FILE ] 如果 FILE 存在且屬有效用戶ID則為真。[ -G FILE ] 如果 FILE 存在且屬有效用戶組則為真。[ -L FILE ] 如果 FILE 存在且是一個(gè)符號(hào)連接則為真。[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was lastread則為真。[ -S FILE ] 如果 FILE 存在且是一個(gè)套接字則為真。[ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recentlythan FILE2, or 如果 FILE1 exists and FILE2 does not則為真。[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1不存在則為真。[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的設(shè)備和節(jié)點(diǎn)號(hào)則為真。
三、字符串判斷[ -z STRING ] 如果STRING的長(zhǎng)度為零則為真 ,即判斷是否為空,空即是真;[ -n STRING ] 如果STRING的長(zhǎng)度非零則為真 ,即判斷是否為非空,非空即是真;[ STRING1 = STRING2 ] 如果兩個(gè)字符串相同則為真 ;[ STRING1 != STRING2 ] 如果字符串不相同則為真 ;[ STRING1 ] 如果字符串不為空則為真,與-n類似
四、數(shù)值判斷INT1 -eq INT2 INT1和INT2兩數(shù)相等為真 ,=INT1 -ne INT2 INT1和INT2兩數(shù)不等為真 ,<>INT1 -gt INT2 INT1大于INT1為真 ,>INT1 -ge INT2 INT1大于等于INT2為真,>=INT1 -lt INT2 INT1小于INT2為真,<</div>INT1 -le INT2 INT1小于等于INT2為真,<=
五、復(fù)雜邏輯判斷-a 與-o 或! 非
exp1: 如果a>b且aif (( a > b ))&& (( a < c ))或者if [[ $a > $b ]]&& [[ $a < $c]]或者if [ $a -gt $b -a $a -lt $c ]
exp2:如果a>b或aif (( a > b )) || (( a < c))或者if [[ $a > $b ]] || [[ $a < $c]]或者if [ $a -gt $b -o $a -lt $c ]"||"和"&&"在SHELL里可以用,也就是第一個(gè)寫成if[ a>b && a
六、調(diào)試及查看shell腳本的執(zhí)行過(guò)程在執(zhí)行的時(shí)候,通過(guò)下面的方式:#bash -x strtst.sh
或者可以在腳本內(nèi)部的開頭,即#!/bin/sh下增加一行set-x
七、舉例1、if語(yǔ)句的基本結(jié)構(gòu)實(shí)現(xiàn):exp1:查看當(dāng)前操作系統(tǒng)類型#!/bin/shSYSTEM=`uname -s` #獲取操作系統(tǒng)類型,我本地是linuxif [ $SYSTEM = "Linux" ] ; then#如果是linux的話打印linux字符串echo "Linux"elif [ $SYSTEM = "FreeBSD" ] ;thenecho "FreeBSD"elif [ $SYSTEM = "Solaris" ] ;thenecho "Solaris"elseecho "What?"fi
2、if利用read傳參判斷exp2:查看分?jǐn)?shù)#!/bin/bash#echo -n "please input yourscore:"#read score#echo "input score is $ score"read -p "please input a score:"scoreecho -e "your score [$score] isjudging 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 "justsoso!"elif [ "$score" -le "100"]&&[ "$score" -ge "85" ];then echo "goodjob!"else echo"input score is wrong , the range is [0-100]!"fi

說(shuō)明:通過(guò)echo 輸出(#注銷掉的)和read-p結(jié)果是一樣的,只需要注意echo的參數(shù)設(shè)置。 echo-e參數(shù)使輸出中的反斜線()的說(shuō)明起作用 echo-n參數(shù)使引號(hào)后的內(nèi)容接著輸出(不換行)
3.注意if判斷中對(duì)于變量的處理,需要加引號(hào),以免一些不必要的錯(cuò)誤!
沒有加雙引號(hào)會(huì)在一些含空格等的字符串變量判斷的時(shí)候產(chǎn)生錯(cuò)誤。加上引號(hào)就可以避免這些不必要的錯(cuò)誤。
愛華網(wǎng)

