shell脚本[] [[]] -n -z 的含义解析
1、在中括号中,判断变量的值, 加不加双引号的问题?
-z 判断 变量的值,是否为空; zero = 0
- 变量的值,为空,返回0,为true
- 变量的值,非空,返回1,为false
-n 判断变量的值,是否为空   name = 名字
- 变量的值,为空,返回1,为false
- 变量的值,非空,返回0,为true
pid="123"
  [ -z "$pid" ]  单对中括号变量必须要加双引号
 [[ -z $pid ]]   双对括号,变量不用加双引号
 [ -n "$pid" ]  单对中括号,变量必须要加双引号
 [[ -z  $pid ]]  双对中括号,变量不用加双引号
2、多个条件判断,[]  和 [[]] 的区别?
2.1:[[  ]]  双对中括号,是不能使用 -a 或者 -o的参数进行比较的;
&& 并且  || 或   -a 并且   -o 或者
[[  ]]   条件判断 &&  并且     ||  或
[[ 5 -lt 3 || 3 -gt 6 ]]    一个条件,满足,就成立  或者的关系 
[[ 5 -lt 3 || 3 -gt 6 ]]      一个条件满足,就成立  或者的关系 
[[ 5 -lt 3 ]]  ||   [[3 -gt 6 ]] 
[[ 5 -lt 3 ]]  ||   [[3 -gt 6 ]]       写在外面也可以
&&  必须两个条件同时满足,和上述一样,这里想说明的问题的是:
[[ 5 -lt 3]]  -o [[ 3 -gt 6 ]]                [[ 5 -lt 3 -o 3 -gt 6 ]]     
[[ 5 -lt 3 -a  3 -gt 6 ]]       [[ 5 -lt 3 -a 3 -gt 6 ]]     
-a 和 -o就不成立了,是因为,[[]]  双对中括号,不能使用 -o和 -a的参数
直接报错:
2.2  [ ]  可以使用 -a   -o的参数,但是必须在 [ ] 中括号内,判断条件,例如:
[ 5 -lt 3  -o  3 -gt 2 ]     或者条件成立
[5 -lt 3 ] -o [ 3 -gt 2]    或者条件, 这个不成立,因为必须在中括号内判断
如果想在中括号外判断两个条件,必须用&& 和 || 比较
[5 -lt 3 ] ||  [ 3 -gt 2]  
[5 -gt 3 ] &&  [ 3 -gt 2]    成立
相对的,|| 和 && 不能在中括号内使用,只能在中括号外使用
3、当判断某个变量的值是否满足正则表达式的时候,必须使用[[  ]]  双对中括号
单对中括号,直接报错:
--------------------- 
来源:CSDN 
原文:https://blog.csdn.net/keep_lcm/article/details/80551435 
文件表达式
-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真 
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真 
-w filename 如果 filename可写,则为真 
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真
filename1 -nt filename2 如果 filename1比 filename2新,则为真。
filename1 -ot filename2 如果 filename1比 filename2旧,则为真。
整数变量表达式
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
字符串变量表达式
If  [ $a = $b ]                 如果string1等于string2,则为真
                                字符串允许使用赋值号做等号
if  [ $string1 !=  $string2 ]   如果string1不等于string2,则为真       
if  [ -n $string  ]             如果string 非空(非0),返回0(true)  
if  [ -z $string  ]             如果string 为空,则为真
if  [ $sting ]                  如果string 非空,返回0 (和-n类似) 
    逻辑非 !                   条件表达式的相反
if [ ! 表达式 ]
if [ ! -d $num ]               如果不存在目录$num
    逻辑与 –a                   条件表达式的并列
if [ 表达式1  –a  表达式2 ]
    逻辑或 -o                   条件表达式的或
if [ 表达式1  –o 表达式2 ]
实例:
#!/bin/bash
#if [ -d x.txt ]
if [ -d ]
then
    cd toolchain; \
    ls *.patch | sort \
    #FILES=$$(ls *.patch | sort); \
    echo "ok"
else
    echo "nok"
fi
每日一言:善学者尽其理,善行者究其难 ---荀子
参考文档: https://blog.csdn.net/superbfly/article/details/49274889
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号