zoukankan      html  css  js  c++  java
  • bash的条件判断

    -e  文件存在
    -a  文件存在 ;这个选项的效果与-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)

    整数比较 


    -eq    等于,如:if [ "$a" -eq "$b" ]
    -ne    不等于,如:if [ "$a" -ne "$b" ]
    -gt    大于,如:if [ "$a" -gt "$b" ]
    -ge    大于等于,如:if [ "$a" -ge "$b" ]
    -lt    小于,如:if [ "$a" -lt "$b" ]
    -le    小于等于,如:if [ "$a" -le "$b" ]
    <     小于(需要双括号),如:(("$a" < "$b"))
    <=   小于等于(需要双括号),如:(("$a" <= "$b"))
    >     大于(需要双括号),如:(("$a" > "$b"))
    >=   大于等于(需要双括号),如:(("$a" >= "$b"))

    字符串比较

    =      等于,如:if [ "$a" = "$b" ]
    ==    等于,如:if [ "$a" == "$b" ],与=等价
    注意:==的功能在[[]]和[]中的行为是不同的,如下: 

    1 [[ $a == z* ]] # 如果$a 以"z"开头(模式匹配)那么将为 true

    2 [[ $a == "z*" ]] # 如果$a 等于 z*(字符匹配),那么结果为 true

    3 [ $a == z* ] # File globbing 和 word splitting 将会发生 

    4 [ "$a" == "z*" ] # 如果$a 等于 z*(字符匹配),那么结果为 true


    一点解释,关于 File globbing 是一种关于文件的速记法,比如"*.c"就是,再如~也是.


    但是 file globbing 并不是严格的正则表达式,虽然绝大多数情况下结构比较像.
    !=    不等于,如:if [ "$a" != "$b" ]
    这个操作符将在[[]]结构中使用模式匹配. 

    <   小于,在 ASCII 字母顺序下.如:
    if [[ "$a" < "$b" ]] 
    if [ "$a" \< "$b" ]
    注意:在[]结构中"<"需要被转义. 

    >   大于,在 ASCII 字母顺序下.如:
    if [[ "$a" > "$b" ]] 
    if [ "$a" \> "$b" ] 
    注意:在[]结构中">"需要被转义. 

    具体参考 Example 26-11 来查看这个操作符应用的例子.
    -z    字符串为"null".就是长度为 0.
    -n    字符串不为"null"
    注意: 
    使用-n 在[]结构中测试必须要用""把变量引起来.使用一个未被""的字符串来使用! -z或者就是未用""引用的字符串本身,放到[]结构中(见 Example 7-6)虽然一般情况下可以工作,但这是不安全的.习惯于使用""来测试字符串是一种好习惯.[1]

  • 相关阅读:
    virtual box 下安装centos 7
    java多线程通信
    redis 实现发布订阅的功能
    Ubuntu系统下为IDEA创建启动图标
    Windows玩转Docker(二):运行whalesay image
    Windows玩转Docker(一):安装
    yarn安装部署
    Hadoop yarn配置参数
    yarn的初步理解
    使用QJM部署HDFS HA集群
  • 原文地址:https://www.cnblogs.com/agostop/p/2710748.html
Copyright © 2011-2022 走看看