1. 字符串测试举例
提示:下面的$file并未定义,而$file1 在上面测试中已定义。
范例1:单条件字符串测试:
[root@test-1 ~]# file1=/etc/services;file2=/etc/rc.local [root@test-1 ~]# echo $file1 $file2 /etc/services /etc/rc.local [root@test-1 ~]# [ -n "$file" ] && echo 1 ||echo 0 0 #若串长度不为0则真。因$file未定义长度为0,所以为假(0) [root@test-1 ~]# [ -z "$file" ] && echo 1 ||echo 0 1 #若串长度为0则真。因$file未定义长度为0,所以为真(1) [root@test-1 ~]# [ -n "$file1" ] && echo 1 ||echo 0 1 #若串长度不为0则真。因$file已定义变量长度不为0,所以为真(1) [root@test-1 ~]# [ -z "$file1" ] && echo 1 ||echo 0 0 #若串长度为0则真。因$file已定义变量长度不为0,所以为假(0) 提示:去掉双引号看看 [root@test-1 ~]# [ -n $file ] && echo 1 ||echo 0 1 [root@test-1 ~]# [ -z $file1 ] && echo 1 ||echo 0 0 提示:字符串比较一定要加双引号
范例2(生产):系统脚本/etc/init.d/nfs字符串测试的应用:
# Remote quota server [ -z "$RQUOTAD" ] && RQUOTAD=`type -path rpc.rquotad` [ -z "$MOUNTD_NFS_V2" ] && MOUNTD_NFS_V2=default [ -z "$MOUNTD_NFS_V3" ] && MOUNTD_NFS_V3=default # Number of servers to be started by default [ -z "$RPCNFSDCOUNT" ] && RPCNFSDCOUNT=8 [ -n "$NLM_GRACE_PERIOD" ] && { /sbin/sysctl -w fs.nfs.nlm_grace_period=$NLM_GRACE_PERIOD >/dev/null 2>&1 }
范例3:多条件字符串测试:
[root@test-1 ~]# file1=/etc/services;file2=/etc/rc.local [root@test-1 ~]# echo $file1 $file2 /etc/services /etc/rc.local [root@test-1 ~]# [ -n "$file" ] && echo 1 ||echo 0 0 #若串长度不为0则真。因$file未定义长度为0,所以为假(0) [root@test-1 ~]# [ -z "$file" ] && echo 1 ||echo 0 1 #若串长度为0则真。因$file未定义长度为0,所以为真(1) [root@test-1 ~]# [ -z "$file1" ] && echo 1 ||echo 0 0 [root@test-1 ~]# [ -z "$file1" -a -z "file2" ] && echo 1 ||echo 0 0 [root@test-1 ~]# [[ -z "$file1" && -z "file2" ]] && echo 1 ||echo 0 0 [root@test-1 ~]# [[ -z "$file1" || -n "file2" ]] && echo 1 ||echo 0 1 [root@test-1 ~]# [ -z "$file1" -o -z "file2" ] && echo 1 ||echo 0 0 [root@test-1 ~]# [ -n "$file1" -o -z "file2" ] && echo 1 ||echo 0 1 [root@test-1 ~]# [ "$file1" == "file2" ] && echo 1 ||echo 0 0 [root@test-1 ~]# [ "$file1" = "file2" ] && echo 1 ||echo 0 0 [root@test-1 ~]# [ "$file1" !== "file2" ] && echo 1 ||echo 0 -bash: [: !==: binary operator expected 0 [root@test-1 ~]# [ "$file1" != "file2" ] && echo 1 ||echo 0 1 [root@test-1 ~]# [ ! "$file1" == "file2" ] && echo 1 ||echo 0 1 [root@test-1 ~]# [ ! "$file1" \> "file2" ] && echo 1 ||echo 0 1 [root@test-1 ~]# [ ! "$file1" \< "file2" ] && echo 1 ||echo 0 0 [root@test-1 ~]# [ ! "${#file1}" \< "${#file2}" ] && echo 1 ||echo 0 1