1 3 Shell指令碼條件測試

2021-08-19 07:07:36 字數 3077 閱讀 6303

布林變數中真為0,假為1。所以可以根據測試機制來判斷語句的返回值。測試機制可以使用下面語法實現:

test表示式[ 表示式 ][[ 表示式 ]],表示式前後必須有空格。

注意: 表示式一般用於[[ ]]中;擴充套件的正規表示式

根據命令的返回值,可以使用邏輯運算讓語句有條件的執行。

#!/bin/bash

#計算第乙個檔案中空行數

[ "$#" -ge 1 ] \

&& \

||

數值測試可以判斷數值之間的大小關係。

表示式

-v var:變數var是否使用(centos 7可用)

[root@centos7 ~]# a=3

[root@centos7 ~]# echo $a

3[root@centos7 ~]# [ -v a ] && echo set || echo no set

set[root@centos7 ~]# unset a

[root@centos7 ~]# [ -v a ] && echo set || echo no set

no set

-gt 是否大於

-ge 是否大於等於

-eq 是否等於

-ne 是否不等於

-lt 是否小於

-le 是否小於等於

用於字元測試中的運算元應該使用雙引號標識。

[root@centos7 ~]# a=abc

[root@centos7 ~]# echo $a

abc[root@centos7 ~]# [ "abc" == "$a" ] && echo yes || echo no

yes[root@centos7 ~]# a=""

[root@centos7 ~]# [ "x" == x"$a" ] && echo empty || echo unempty #常用於判斷乙個變數是否為空

empty

表示式

== 是否等於

> ascii碼是否大於ascii碼

< 是否小於

!= 是否不等於

=~ 左側字串是否能夠被右側的pattern所匹配

-z "string「 字串是否為空,空為真,不空為假

-n "string「 字串是否不空,不空為真,空為假

#!/bin/bash

#判斷磁碟利用率和inode使用率,超過80%報警

diskfree="`df | tr -s " " % | cut -d% -f5 | grep -o "[0-9]*" | sort -rn | head -1 `"

inodefree="`df -i | tr -s " " % | cut -d% -f5 | grep -o "[0-9]*" | sort -rn | head -1 `"

[ "$diskfree" -ge 80 ] \

&& wall "the disk will full!" \

|| echo -e "\e[32;1mthe disk is healthy!\e[0m"

[ "$inodefree" -ge 80 ] \

&& wall "the inode will full!" \

|| echo -e "\e[32;1mthe inode is healthy!\e[0m"

存在性測試

-e file: 檔案存在性測試,存在為真,否則為假

-b file:是否存在且為塊裝置檔案

-c file:是否存在且為字元裝置檔案

-d file:是否存在且為目錄檔案

-f file:是否存在且為普通檔案

-h file 或 -l file:存在且為符號鏈結檔案

-p file:是否存在且為命名管道檔案

-s file:是否存在且為套接字檔案

[root@centos7 ~]# [ -e /etc/passwd ] && echo exist 

exist

許可權測試

-r file:是否存在且可讀

-w file: 是否存在且可寫

-x file: 是否存在且可執行

-u file:是否存在且擁有suid許可權

-g file:是否存在且擁有sgid許可權

-k file:是否存在且擁有sticky許可權

[root@centos7 ~]# [ -u /bin/passwd ] && echo suid

suid

檔案大小測試

-s file: 是否存在且非空

-t fd: fd 檔案描述符是否在某終端已經開啟

-o file:當前有效使用者是否為檔案屬主

-g file:當前有效使用者是否為檔案屬組

[root@centos7 ~]# [ -o /etc/passwd ] && echo yes || echo no

yes

雙目標測試

file1 -ef file2: file1是否是file2的硬鏈結

file1 -nt file2: file1是否新於file2(比較mtime)

file1 -ot file2: file1是否舊於file2

#!/bin/bash

#判斷引數檔案是否是「.sh」字尾的檔案,是的話新增執行許可權

[ -f $1 -a ! -x $1 ] ||

echo "$1" | grep ".*[.]sh$" >> /dev/null

[ $? -eq 0 ] \

&& \

|| echo "$1 not is a script"

shell指令碼 條件

test或 命令 test用法 檢查乙個檔案是否存在。if test f fred.c thenfi或 if f fred.c then fi bin sh echo is it morning?please answer yes or no read timeofday if timeofday ...

shell指令碼條件判斷

unix shell 程式設計中條件判斷是極為重要的,以下是常用的條件判斷 檔案判斷 b file 若檔案存在且是乙個塊特殊檔案,則為真 c file 若檔案存在且是乙個字元特殊檔案,則為真 d file 若檔案存在且是乙個目錄,則為真 e file 若檔案存在,則為真 f file 若檔案存在且是...

shell指令碼條件判斷

shell指令碼條件判斷 unix shell 程式設計中條件判斷是極為重要的,以下是常用的條件判斷 b file 若檔案存在且是乙個塊特殊檔案,則為真 c file 若檔案存在且是乙個字元特殊檔案,則為真 d file 若檔案存在且是乙個目錄,則為真 e file 若檔案存在,則為真 f file...