1. 程式人生 > >1.3 Shell腳本編程基礎之條件測試

1.3 Shell腳本編程基礎之條件測試

註意 null 條件 .sh 1.3 添加 套接字 變量 bash

判斷某需求是否滿足,需要由測試機制來實現,專用的測試表達式需要由測試命令輔助完成測試過程
評估布爾聲明,以便用在條件性執行中
? 若真,則返回0
? 若假,則返回1

測試命令:

? test EXPRESSION
? [ EXPRESSION ]
? [[ EXPRESSION ]]
註意:EXPRESSION前後必須有空白字符

註意: 表達式一般用於[[ ]]中

bash的數值測試

-v VAR

變量VAR是否設置

數值測試:

-gt 是否大於
-ge 是否大於等於
-eq 是否等於
-ne 是否不等於
-lt 是否小於
-le 是否小於等於

bash的字符串測試

用於字符測試中的操作數應該使用雙引號標識

字符串測試:

= 是否等於
> ascii碼是否大於ascii碼
< 是否小於
!= 是否不等於
=~ 左側字符串是否能夠被右側的PATTERN所匹配

註意: 此表達式一般用於[[ ]]中;擴展的正則表達式

-z "STRING“ 字符串是否為空,空為真,不空為假
-n "STRING“ 字符串是否不空,不空為真,空為假

註意:用於字符串比較時的用到的操作數都應該使用引號

文件存在性測試

-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

雙目標測試

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 not is a file"; exit; } 
echo "$1" | grep ".*[.]sh$" >> /dev/null
[ $? -eq 0 ]     && { chmod +x $1; echo "Set up!"; }     || echo "$1 not is a script"

1.3 Shell腳本編程基礎之條件測試