Shell數值比較

2021-09-02 08:37:17 字數 3010 閱讀 5135

1.  關於檔案與目錄的偵測邏輯卷標!

-f  常用!偵測『檔案』是否存在 eg: if [ -f filename ]

-d  常用!偵測『目錄』是否存在

-b  偵測是否為乙個『 block 檔案』

-c  偵測是否為乙個『 character 檔案』

-s  偵測是否為乙個『 socket 標籤檔案』

-l  偵測是否為乙個『 symbolic link 的檔案』

-e  偵測『某個東西』是否存在!

2.  關於程式的邏輯卷標!

-g  偵測是否由 gid 所執行的程式所擁有

-o  偵測是否由 uid 所執行的程式所擁有

-p  偵測是否為程式間傳送資訊的 name pipe 或是 fifo (老實說,這個不太懂!)

3.  關於檔案的屬性偵測!

-r  偵測是否為可讀的屬性

-w  偵測是否為可以寫入的屬性

-x  偵測是否為可執行的屬性

-s  偵測是否為『非空白檔案』

-u  偵測是否具有『 suid 』的屬性

-g  偵測是否具有『 sgid 』的屬性

-k  偵測是否具有『 sticky bit 』的屬性

4.  兩個檔案之間的判斷與比較;例如[ test file1 -nt file2 ]

-nt 第乙個檔案比第二個檔案新

-ot 第乙個檔案比第二個檔案舊

-ef 第乙個檔案與第二個檔案為同乙個檔案( link 之類的檔案)

5.  邏輯的『和(and)』『或(or)』

&&  邏輯的 and 的意思

||  邏輯的 or 的意思

運算符號    代表意義

=   等於 應用於:整型或字串比較 如果在 中,只能是字串

!=  不等於 應用於:整型或字串比較 如果在 中,只能是字串

<    小於 應用於:整型比較 在 中,不能使用 表示字串 >   大於應用於:整型比較 在 中,不能使用 表示字串

-eq 等於 應用於:整型比較

-ne 不等於 應用於:整型比較

-lt 小於 應用於:整型比較

-gt 大於 應用於:整型比較

-le 小於或等於 應用於:整型比較

-ge 大於或等於 應用於:整型比較

-a  雙方都成立(and) 邏輯表示式 –a 邏輯表示式

-o  單方成立(or) 邏輯表示式 –o 邏輯表示式

-z  空字串

-n  非空字串

所以你的迴圈條件部分寫成這樣才是對的:

while [ "$" -lt 5 ]; do

注意在條件檢測中把變數名引起來的雙引號不能省略,這個地方如果將來是字串的判定,沒有雙引號在某些條件下會被玩死的。所以最好養成習慣,無論是不是數值都把變數名用雙引號引起來。另外,做累加操作還有別的方法,像下面這樣:

#!/bin/ksh

counter=0

while [ "$" -lt 5 ]; do

((counter++))

echo "counter is $counter"

done

for i in $(seq 0 99); do [ $i lt 10 ] && useradd student0$i || useradd student$i; done

shell中的特殊變數:

變數名含義

$0shell或shell指令碼的名字

$*以一對雙引號給出引數列表

$@將各個引數分別加雙引號返回

$#引數的個數

$_代表上乙個命令的最後乙個引數

$$代表所在命令的pid

$!代表最後執行的後台命令的pid

$?代表上乙個命令執行後的退出狀態

e.g.

編輯如下test.sh指令碼

#!/bin/bash

echo $0

echo $*

echo $@

echo $#

echo $$

ls -a /home

echo $_

在terminal視窗中執行:

xk@linux:~/work> ./test.sh -a -b -c /home

./test.sh

-a -b -c /home

-a -b -c /home

43250

. .. fy jodier sky xk zhj

/home

xk@linux:~/work>echo $?

0xk@linux:~/work>echo $!

xk@linux:~/work> ls -a /home &

[1] 3302

xk@linux:~/work> . .. fy jodier sky xk zhj

[1]+ done /bin/ls $ls_options -a /home

xk@linux:~/work> echo $!

3302

xk@linux:~/work>

為了區別$*和$@編寫如下test.sh指令碼:

#!/bin/bash

function testargs

testargs "$*"

testargs "$@"

unset -f testargs

在terminal視窗中執行:

xk@linux:~/work> ./test.sh -a -b /home

1 args

3 args

xk@linux:~/work>

這裡有乙個很有意思的問題,如果test.sh為如下的內容:

#!/bin/bash

function testargs

testargs $*

testargs $@

unset -f testargs

再次執行有:

xk@linux:~/work> ./test.sh -a -b /home

3 args

3 args

xk@linux:~/work>

shell數值和字元比較

二元比較操作符,比較變數或者比較數字.注意數字與字串的區別.整數比較 eq 等於,如 if a eq b 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 小於...

shell指令碼 數值比較

用於數值比較的無非大於 小於 等於 大於等於 小於等於這幾個。比較格式 數值1 比較符 數值2 注意左邊的括號與數值1之間有乙個空格,同樣,數值2和右邊的括號之間也有空格。數值比較運算子對應下面幾個 eq判斷相等,相等返回true,否則返回false ne判斷是否不相等,不相等返回true,否則返回...

Shell比較字串 數值

操作符解釋舉例 eq等於 if a eq b 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 小於 需要雙括號 if a b 小於等於 需要雙括號 if a b 大於 需要雙括號 if a...