判断一个脚本中的变量是否为空,我写了一个这样的shell脚本:

  1. #!/bin/sh

  2. #filename: test.sh

  3. para1=

  4. if [ ! -n $para1 ]; then

  5.  echo "IS NULL"

  6. else

  7.  echo "NOT NULL"

  8. fi


然后把该脚本:test.sh通过chmod +x 改为可以执行的脚本,执行后输出的结果为: NOT NULL,很是奇怪,最后,通过查询一些资料发现,可以通过如下方式判断一个shell变量是否为空:

1. 变量通过" "引号引起来

      如下所示:,可以得到结果为 IS NULL.

  1. #!/bin/sh

  2. para1=

  3. if [ ! -n "$para1" ]; then

  4.  echo "IS NULL"

  5. else

  6.  echo "NOT NULL"

  7. fi


2. 直接通过变量判断

      如下所示:得到的结果为: IS NULL

  1. #!/bin/sh

  2. para1=

  3. if [ ! $para1 ]; then

  4.  echo "IS NULL"

  5. else

  6.  echo "NOT NULL"

  7. fi


3. 使用test判断

    得到的结果就是: dmin is not set!  

  1. #!/bin/sh

  2. dmin=

  3. if test -z "$dmin"

  4. then

  5.  echo "dmin is not set!"

  6. else

  7.  echo "dmin is set !"

  8. fi



4. 使用""判断

  1. #!/bin/sh

  2. dmin=

  3. if [ "$dmin" = "" ]

  4. then

  5.  echo "dmin is not set!"

  6. else

  7.  echo "dmin is set !"

  8. fi


#!/bin/bash
a="zzz"
if [[ "$a" = "" ]]
then
echo $a empty
else
echo $a no empty
fi


if [ -z "$VAR" ] ; then
command
fi


先写一些基本语法:

1、字符串判断

str1 = str2       当两个串有相同内容、长度时为真
str1 != str2      当串str1和str2不等时为真
-n str1        当串的长度大于0时为真(串非空)
-z str1        当串的长度为0时为真(空串)
str1           当串str1为非空时为真

2、数字的判断

int1 -eq int2    两数相等为真
int1 -ne int2    两数不等为真
int1 -gt int2    int1大于int2为真
int1 -ge int2    int1大于等于int2为真
int1 -lt int2    int1小于int2为真
int1 -le int2    int1小于等于int2为真

3 文件的判断

-r file     用户可读为真
-w file     用户可写为真
-x file     用户可执行为真
-f file     文件为正规文件为真
-d file     文件为目录为真
-c file     文件为字符特殊文件为真
-b file     文件为块特殊文件为真
-s file     文件大小非0时为真
-t file     当文件描述符(默认为1)指定的设备为终端时为真

3、复杂逻辑判断

-a         与
-o        或
!        非