Linux shell 比較運(yùn)算符使用方法教程
Linux繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計(jì)思想,是一個(gè)性能穩(wěn)定的多用戶(hù)網(wǎng)絡(luò)操作系統(tǒng)。對(duì)于Linux基礎(chǔ),肯定要掌握的是基本命令和一些重要運(yùn)算符,這篇文章主要介紹了Linux shell 比較運(yùn)算符詳解,需要的朋友可以參考下
文件比較運(yùn)算符
-e filename 如果 filename 存在,則為真 [ -e /var/log/syslog ]
-d filename 如果 filename 為目錄,則為真 [ -d /tmp/mydir ]
-f filename 如果 filename 為常規(guī)文件,則為真 [ -f /usr/bin/grep ]
-L filename 如果 filename 為符號(hào)鏈接,則為真 [ -L /usr/bin/grep ]
-r filename 如果 filename 可讀,則為真 [ -r /var/log/syslog ]
-w filename 如果 filename 可寫(xiě),則為真 [ -w /var/mytmp.txt ]
-x filename 如果 filename 可執(zhí)行,則為真 [ -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 ]
字符串比較運(yùn)算符 (請(qǐng)注意引號(hào)的使用,這是防止空格擾亂代碼的好方法)
-z string 如果 string 長(zhǎng)度為零,則為真 [ -z "$myvar" ]
-n string 如果 string 長(zhǎng)度非零,則為真 [ -n "$myvar" ]
string1 = string2 如果 string1 與 string2 相同,則為真 [ "$myvar" = "one two three" ]
string1 != string2 如果 string1 與 string2 不同,則為真 [ "$myvar" != "one two three" ]
算術(shù)比較運(yùn)算符
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 ]
算術(shù)運(yùn)算符
+ - * / % 表示加減乘除和取余運(yùn)算
+= -= *= /= 同 C 語(yǔ)言中的含義
位操作符
> >>= 表示位左右移一位操作
& &= | |= 表示按位與、位或操作
~ ! 表示非操作
^ ^= 表示異或操作
關(guān)系運(yùn)算符
= == != 表示大于、小于、大于等于、小于等于、等于、不等于操作
&& || 邏輯與、邏輯或操作
測(cè)試命令
test命令用于檢查某個(gè)條件是否成立,它可以進(jìn)行數(shù)值、字符和文件3個(gè)方面的測(cè)試,其測(cè)試符和相應(yīng)的功能分別如下。
(1)數(shù)值測(cè)試:
-eq 等于則為真。
-ne 不等于則為真。
-gt 大于則為真。
-ge 大于等于則為真。
-lt 小于則為真。
-le 小于等于則為真。
(2)字串測(cè)試:
= 等于則為真。
!= 不相等則為真。
-z字串 字串長(zhǎng)度偽則為真。
-n字串 字串長(zhǎng)度不偽則為真。
(3)文件測(cè)試:
-e文件名 如果文件存在則為真。
-r文件名 如果文件存在且可讀則為真。
-w文件名 如果文件存在且可寫(xiě)則為真。
-x文件名 如果文件存在且可執(zhí)行則為真。
-s文件名 如果文件存在且至少有一個(gè)字符則為真。
-d文件名 如果文件存在且為目錄則為真。
-f文件名 如果文件存在且為普通文件則為真。
-c文件名 如果文件存在且為字符型特殊文件則為真。
-b文件名 如果文件存在且為塊特殊文件則為真
條件變量替換:
Bash Shell可以進(jìn)行變量的條件替換,既只有某種條件發(fā)生時(shí)才進(jìn)行替換,替換
條件放在{}中.
(1) ${value:-word}
當(dāng)變量未定義或者值為空時(shí),返回值為word的內(nèi)容,否則返回變量的值.
(2) ${value:=word}
與前者類(lèi)似,只是若變量未定義或者值為空時(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á)式.
(6) ${#value}
變量的字符個(gè)數(shù)
(7) ${value#pattern}
${value##pattern}
去掉value中與pattern相匹配的部分,條件是value的開(kāi)頭與pattern相匹配
#與##的區(qū)別在于一個(gè)是最短匹配模式,一個(gè)是最長(zhǎng)匹配模式.
(8) ${value%pattern}
${value%%pattern}
于(7)類(lèi)似,只是是從value的尾部于pattern相匹配,%與%%的區(qū)別與#與##一樣
(9) ${value/pattern/string}
${value//pattern/string}
進(jìn)行變量?jī)?nèi)容的替換,把與pattern匹配的部分替換為string的內(nèi)容,/與//的區(qū)別與上同
注意: 上述條件變量替換中,除(2)外,其余均不影響變量本身的值
#!/bin/bash
var1="1"
var2="2"
下面是“與”運(yùn)算符-a,另外注意,用一個(gè)test命令就可以了,還有if條件后面的分號(hào)
if test $var1 = "1"-a $var2 = "2" ; then
echo "equal"
fi
下面是“或”運(yùn)算符 -o,有一個(gè)為真就可以
if test $var1 != "1" -o $var2 != "3" ; then
echo "not equal"
fi
下面是“非”運(yùn)算符 !
if條件是為真的時(shí)候執(zhí)行,如果使用!運(yùn)算符,那么原表達(dá)式必須為false
if ! test $var1 != "1"; then
echo "not 1"
fi
以上三個(gè)if都為真,所以三個(gè)echo都會(huì)打印
補(bǔ)充:Linux基本命令
?、賚s 意為list 列出當(dāng)前文件夾中的文件
-l 顯示文件的屬性 可用ll來(lái)表示
?、赼lias 別名 看看是否有別名的文件
③cd dir 跳躍目錄 -P選項(xiàng) 將路徑中的鏈接文件替換成鏈接指向的文件路徑
④pwd 查看當(dāng)前工作的文件夾名 使用-P的選項(xiàng),會(huì)直接進(jìn)入到其中,相當(dāng)于cd
相關(guān)閱讀:Linuxshell腳本不執(zhí)行問(wèn)題實(shí)例分析
shell腳本不執(zhí)行問(wèn)題:某天研發(fā)某同事找我說(shuō)幫他看看他寫(xiě)的shell腳本,死活不執(zhí)行,報(bào)錯(cuò)。我看了下,腳本很簡(jiǎn)單,也沒(méi)有常規(guī)性的錯(cuò)誤,報(bào)“:badinterpreter:Nosuchfileordirectory”錯(cuò)??催@錯(cuò),我就問(wèn)他是不是在windows下編寫(xiě)的腳本,然后在上傳到linux服務(wù)器的……果然。原因:在DOS/windows里,文本文件的換行符為rn,而在*nix系統(tǒng)里則為n,所以DOS/Windows里編輯過(guò)的文本文件到了*nix里,每一行都多了個(gè)^M。解決:
1)重新在linux下編寫(xiě)腳本;
2)vi:%s/r//g:%s/^M//g(^M輸入用Ctrl+v,Ctrl+m)附:sh-x腳本文件名,可以單步執(zhí)行并回顯結(jié)果,有助于排查復(fù)雜腳本問(wèn)題。
Linux shell 比較運(yùn)算符相關(guān)文章: