linux shell 判斷引數

2021-06-21 20:37:09 字數 3668 閱讀 1749

shell 程式設計中使用到得if語句內判斷引數

–b 當file存在並且是塊檔案時返回真

-c 當file存在並且是字元檔案時返回真

-d 當pathname存在並且是乙個目錄時返回真

-e 當pathname指定的檔案或目錄存在時返回真

-f 當file存在並且是正規檔案時返回真

-g 當由pathname指定的檔案或目錄存在並且設定了sgid位時返回為真

-h 當file存在並且是符號鏈結檔案時返回真,該選項在一些老系統上無效

-k 當由pathname指定的檔案或目錄存在並且設定了「粘滯」位時返回真

-p 當file存在並且是命令管道時返回為真

-r 當由pathname指定的檔案或目錄存在並且可讀時返回為真

-s 當file存在檔案大小大於0時返回真

-u 當由pathname指定的檔案或目錄存在並且設定了suid位時返回真

-w 當由pathname指定的檔案或目錄存在並且可執行時返回真。乙個目錄為了它的內容被訪問必然是可執行的。

-o 當由pathname指定的檔案或目錄存在並且被子當前程序的有效使用者id所指定的使用者擁有時返回真。

unix shell 裡面比較字元寫法:

-eq   等於

-ne    不等於

-gt    大於

-lt    小於

-le    小於等於

-ge   大於等於

-z    空串

=    兩個字元相等

!=    兩個字元不等

-n    非空串

更為詳細的說明:

運算子                     描述                          示例

檔案比較運算子

-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 ]

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

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

<

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

>

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

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

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

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

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

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

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

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

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

-z空字串

-n非空字串

邏輯卷標表示意思

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 的意思

linux shell 引數傳遞

在shell程式設計時.可以使用引數。shell有位置引數和內部引數 1.位置引數 由系統提供的引數稱為位置引數。位置引數的值可以用 n得到,n是乙個數字,如果為1,即 1.類似c語言中的陣列,linux會把輸入的命令字串分段並給每段進行標號,標號從0開始。第0號為程式名字,從1開始就表示傳遞給程式...

Linux shell 引數展開

reminder time to go to the dentist 將值儲存在reminder中 sleep 120 等待兩分鐘 echo reminder 顯示資訊 替換運算子 運算子 替換 如果varname存在且非null,返回其值 否則,返回word。用途 如果變數未定義,則返回預設值。範...

Linux shell傳遞引數

在執行 shell 指令碼時,向指令碼傳遞引數,指令碼內獲取引數的格式為 n。n 代表乙個數字,1 為執行指令碼的第乙個引數,2 為執行指令碼的第二個引數,以此類推 例項以下例項我們向指令碼傳遞三個引數,並分別輸出,其中 0 為執行的檔名 bin bash echo shell 傳遞引數例項!ech...