布林變數中真為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...