?
一. 字符串是否相等比較.
?
1 #!/bin/ sh 2 3 aa= 4 bb= " hello " 5 cc = " world " 6 以下正確例子 7 # 1 .注意判斷中的字符串變量用雙引號括起來(不括起來在多數情況下正確,某些情況下會出錯); 8 # 2 .字符串判斷相等用一個等號,不是兩個; 9 # 3 .= 兩邊有空格; 10 # 4 .[的左右兩邊,]的左邊有空格. 11 if [ " ${aa} " = " ${bb} " ]; then 12 echo " yes " 13 else 14 echo " no " 15 fi 16 以下不正確例子 17 # aa為空,bb不為空,這時不括起來會報錯. 18 if [ ${aa} = ${bb} ]; then 19 echo " yes " 20 else 21 echo " no " 22 fi
輸出結果如下:
no
./test.sh: 18: [: =: unexpected operator
no
no
?
二. 數字大小比較.
數字大小比較 不能用 = ?!= ?< ?>等,要用-eq -ne -lt -gt等.
1 #!/bin/ bash 2 3 val1= 1 4 val2= 2 5 6 #比較操作: 7 #- eq 相等 8 #- ne 不相等 9 #- gt 大于 10 #- lt 小于 11 #- ge 大于等于 12 #- le 小于等于 13 14 if [ " ${val1} " -gt " ${val2} " ]; then 15 echo " ${val1} > ${val2} " 16 else 17 echo " ${val1} < ${val2} " 18 fi
?
?
?
?
?
?
?
以下轉自:http://blog.csdn.net/ithomer/article/details/6836382
運算符 | 描述 | 示例 |
文件比較運算符 | ||
-e? filename | 如果? filename ?存在,則為真 | [ -e /var/log/syslog ] |
-d? filename | 如果? filename ?為目錄,則為真 | [ -d /tmp/mydir ] |
-f? filename | 如果? filename ?為常規文件,則為真 | [ -f /usr/bin/grep ] |
-L? filename | 如果? filename ?為符號鏈接,則為真 | [ -L /usr/bin/grep ] |
-r? filename | 如果? filename ?可讀,則為真 | [ -r /var/log/syslog ] |
-w? filename | 如果? filename ?可寫,則為真 | [ -w /var/mytmp.txt ] |
-x? filename | 如果? filename ?可執行,則為真 | [ -L /usr/bin/grep ] |
filename1 ?-nt? filename2 | 如果? filename1 ?比? filename2 ?新,則為真 | [ /tmp/install/etc/services -nt /etc/services ] |
filename1 ?-ot? filename2 | 如果? filename1 ?比? filename2 ?舊,則為真 | [ /boot/bzImage -ot arch/i386/boot/bzImage ] |
字符串比較運算符 ? (請注意引號的使用,這是防止空格擾亂代碼的好方法) | ||
-z? string | 如果? string ?長度為零,則為真 | [ -z "$myvar" ] |
-n? string | 如果? string ?長度非零,則為真 | [ -n "$myvar" ] |
string1 ?=? string2 | 如果? string1 ?與? string2 ?相同,則為真 | [ "$myvar" = "one two three" ] |
string1 ?!=? string2 | 如果? string1 ?與? string2 ?不同,則為真 | [ "$myvar" != "one two three" ] |
算術比較運算符 | ||
num1 ?-eq? num2 | 等于 | [ 3 -eq $mynum ] |
num1 ?-ne? num2 | 不等于 | [ 3 -ne $mynum ] |
num1 ?-lt? num2 | 小于 | [ 3 -lt $mynum ] |
num1 ?-le? num2 | 小于或等于 | [ 3 -le $mynum ] |
num1 ?-gt? num2 | 大于 | [ 3 -gt $mynum ] |
num1 ?-ge? num2 | 大于或等于 |
[ 3 -ge $mynum ]
|
?
?
算術運算符?
+ - * / % 表示加減乘除和取余運算
+= -= *= /= 同 C 語言中的含義
?
位操作符
> >>= 表示位左右移一位操作
& &= | |= 表示按位與、位或操作
~ ! 表示非操作
^ ^= 表示異或操作?
?
關系運算符?
= == != 表示大于、小于、大于等于、小于等于、等于、不等于操作
&& || 邏輯與、邏輯或操作
?
?
測試命令
test命令用于檢查某個條件是否成立,它可以進行數值、字符和文件3個方面的測試,其測試符和相應的功能分別如下。 (1)數值測試: -eq 等于則為真。 -ne 不等于則為真。 -gt 大于則為真。 -ge 大于等于則為真。 -lt 小于則為真。 -le 小于等于則為真。 (2)字串測試: = 等于則為真。 != 不相等則為真。 -z字串 字串長度偽則為真。 -n字串 字串長度不偽則為真。 (3)文件測試: -e文件名 如果文件存在則為真。 -r文件名 如果文件存在且可讀則為真。 -w文件名 如果文件存在且可寫則為真。 -x文件名 如果文件存在且可執行則為真。 -s文件名 如果文件存在且至少有一個字符則為真。 -d文件名 如果文件存在且為目錄則為真。 -f文件名 如果文件存在且為普通文件則為真。 -c文件名 如果文件存在且為字符型特殊文件則為真。 -b文件名 如果文件存在且為塊特殊文件則為真 |
條件變量替換:?
?? Bash Shell可以進行變量的條件替換,既只有某種條件發生時才進行替換,替換?
條件放在{}中.?
(1) ${value:-word}?
?????? 當變量未定義或者值為空時,返回值為word的內容,否則返回變量的值.?
?
(2) ${value:=word}?
?????? 與前者類似,只是若變量未定義或者值為空時,在返回word的值的同時將? word賦值給value?
?
(3) ${value:?message}?
?????? 若變量已賦值的話,正常替換.否則將消息message送到標準錯誤輸出(若 此替換出現在Shell程序中,那么該程序將終止運行)?
?
(4) ${value:+word}?
?????? 若變量已賦值的話,其值才用word替換,否則不進行任何替換?
?
(5) ${value:offset}?
?????? ${value:offset:length}? 從變量中提取子串,這里offset和length可以是算術表達式.?
?
(6) ${#value}?
?????? 變量的字符個數?
?
(7) ${value#pattern}?
?????? ${value##pattern}?
?????? 去掉value中與pattern相匹配的部分,條件是value的開頭與pattern相匹配?
?????? #與##的區別在于一個是最短匹配模式,一個是最長匹配模式.?
?
(8) ${value%pattern}?
?????? ${value%%pattern}?
?????? 于(7)類似,只是是從value的尾部于pattern相匹配,%與%%的區別與#與##一樣?
?
(9) ${value/pattern/string}?
?????? ${value//pattern/string}?
?????? 進行變量內容的替換,把與pattern匹配的部分替換為string的內容,/與//的區
別與上同?
注意: ? 上述條件變量替換中,除(2)外,其余均不影響變量本身的值 ?
?
#!/bin/bash
var1="1"
var2="2"
下面是“ 與 ”運算符 -a ,另外注意,用一個test命令就可以了,還有if條件后面的分號
if test $var1 = "1"
-a
?$var2 = "2" ; then
?? echo "equal"
fi
下面是“ 或 ”運算符? -o ,有一個為真就可以
if test $var1 != "1"?
-o
?$var2 != "3" ; then
?? echo "not equal"
fi
下面是“
非
”運算符?
!
if條件是為真的時候執行,如果使用!運算符,那么原表達式必須為false
if ! test $var1?
!=
?"1"; then
?? echo "not 1"
fi
以上三個if都為真,所以三個echo都會打印
?
示例:
?
- #!/bin/sh ??
- ??
- aa= "August?15,?2012" ??
- bb= "August?15,?20122" ??
- cc= "123" ??
- dd= "123" ??
- ?
- #?-o ??
- if ?[? "$aa" ?=? "$bb" ?-o? "$cc" ?=? "$dd" ?];?then??
- ????echo? "yes" ??
- else ??
- ????echo? "no" ??
- fi??
- ?
- #?-a?and?! ??
- if ?[? "$aa" ?!=? "$bb" ?-a? "$cc" ?=? "$dd" ?];?then??
- ????echo? "yes" ??
- else ??
- ????echo? "no" ??
- fi??
?
------------------------------------------------------------------------------------------------------
shell字符串比較、判斷是否為數字
二元比較操作符,比較變量或者比較數字.注意數字與字符串的區別.
-ne???????不等于,如:if [ "$a" -ne "$b" ] -gt???????大于,如:if [ "$a" -gt "$b" ] -ge???????大于等于,如:if [ "$a" -ge "$b" ] -lt???????小于,如:if [ "$a" -lt "$b" ] -le???????小于等于,如:if [ "$a" -le "$b" ] <???????小于(需要雙括號),如:(("$a" < "$b")) <=???????小于等于(需要雙括號),如:(("$a" <= "$b")) >???????大于(需要雙括號),如:(("$a" > "$b"))
>=???????大于等于(需要雙括號),如:(("$a" >= "$b"))
?
? 1)?while [ ! -f $file -o "$fileSize" -lt "$FILESIZE" ] 2)?while [ ! -f $file -o "$fileSize" -lt 1000 ] 3)?(("$fileSize" < 1000))
推薦使用第一種
==???????等于,如:if [ "$a" == "$b" ],與=等價
!=???????不等于,如:if [ "$a" != "$b" ]
<???????小于,在ASCII字母順序下.如:
>???????大于,在ASCII字母順序下.如:
-z???????字符串為"null".就是長度為0 -n???????字符串不為"null" ? ? 字符串比較實例: if [? "$var1" = "$var2" ?] 代碼: ?
? ?
注意:
? awk '{print $2}' class.txt | grep '^[0-9.]' > res |
?
推薦參考:
?
Linux 之 shell 比較運算符 (推薦)
Linux Shell學習簡單小結 (推薦)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
