Bash_Shell if 条件判断

       菜鸟我最近在学习shell脚本,自己写了个很简短的脚本测试下,一直报错“syntax error near unexpected token `then' ”。上网google了一圈也没发现原因。原来我在写if条件判断的时候,if后面缺少一个空格

if [ 判断条件 ]
       在写if条件判断的时候,要注意不但if后面需要空格,而且“ [ ” 后面 和“ ] ”前面都需要有空格。有没有感觉很无语。还有一点需要谨记,在shell脚本中当使用“ = ”给变量赋值的时候,在 “ = ”两边一定不能加空格,否者会把变量名当作一个命令来执行而报出“ command not found ”的错误,但是在if条件判断的时候,if [ "判断条件" ] 判断条件中需要用到比较的时候则“ = ” 或者 " != "的两边都需要用空格隔开。另外在写if判断的时候,不要忘记then,否者也会有问题。当然elif(相当于else if)是可选的。

      下面再总结一下shell脚本中,if判断中的测试选项。


1,关于文件的判断

       返回 true 如果...

       -e 文件存在
       -f file 是一个 regular 文件(不是目录或者设备文件)
       -s 文件长度不为 0
       -d 文件是个目录
       -b 文件是个块设备(软盘,cdrom 等等)
       -c 文件是个字符设备(键盘,modem,声卡等等)
       -p 文件是个管道
       -h 文件是个符号链接
       -L 文件是个符号链接
       -S 文件是个 socket
       -t 关联到一个终端设备的文件描述符
           这个选项一般都用来检测是否在一个给定脚本中的 stdin[-t0]或[-t1]是一个终端
       -r 文件具有读权限(对于用户运行这个 test)
       -w 文件具有写权限(对于用户运行这个 test)
       -x 文件具有执行权限(对于用户运行这个 test)


         -g  set-group-id(sgid)标志到文件或目录上,如果一个目录具有 sgid 标志,那么一个被创建在这个目录里的文件,这个目录属于创建这个目录的用户组,并不一定与创建这个文件的用户的组相同.对于 workgroup 的目录共享来说,这非常有用.见<<UNIX 环境高级编程中文版>>第 58 页.

         -u  set-user-id(suid)标志到文件上如果运行一个具有 root 权限的文件,那么运行进程将取得 root 权限,即使你是一个普通用户.[1]这对于需要存取系统硬件的执行操作(比如 pppd 和 cdrecord)非常有用.如果没有 suid 标志的话,那么普通用户(没有 root 权限)将无法运行这种程序.见<<UNIX 环境高级编程中文版>>第 58 页.
-rwsr-xr-t
1 root
178236 Oct 2 2000 /usr/sbin/pppd
对于设置了 suid 的文件,在它的权限标志中有"s".

        -k  设置粘贴位,见<<UNIX 环境高级编程中文版>>第 65 页.对于"sticky bit",save-text-mode 标志是一个文件权限的特殊类型.如果设置了这个标志,那么这个文件将被保存在交换区,为了达到快速存取的目的.如果设置在目录
中,它将限制写权限.对于设置了 sticky bit 位的文件或目录,权限标志中有"t".
drwxrwxrwt
7 root
1024 May 19 21:26 tmp/
如果一个用户并不时具有 stick bit 位的目录的拥有者,但是具有写权限,那么用户只能在这个目录下删除自己所拥有的文件.这将防止用户在一个公开的目录中不慎覆盖或者删除别人的文件,比如/tmp(当然 root 或者是目录的所有者可以随便删除或重命名其中的文件).

-O 你是文件的所有者.
-G 文件的 group-id 和你的相同.
-N 从文件最后被阅读到现在,是否被修改.

       f1 -nt f2     文件 f1 比 f2 新

       f1 -ot f2     f1 比 f2 老

       f1 -ef f2     f1 和 f2 都硬连接到同一个文件.

       !                非--反转上边测试的结果(如果条件缺席,将返回 true)


2,关于字符串的判断

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

       str1          当串str1为非空时为真


3,数字的判断
      int1 -eq int2    两数相等为真

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

你可能感兴趣的:(编程,shell,unix,脚本,测试,bash)