前端analysis | 3w & 1h

《Linux》- shell条件判断

2020-05-14

shell 文件权限

shell 开头

  • 以sh后缀
  • 开头#注释,表明采用何种解释器
    1
    #!/bin/bash 
  • 添加作者等说明
    1
    2
    3
    4
    5
    6
     #/bin/bash
    <<ABC
    author:cheonghu
    date:2020-05-06
    desc:shell demo
    ABC

文件权限

1
2
3
$ ll 
total 4
-rw-r--r-- 1 root root 88 Apr 24 22:15 demo.sh
  • 其中可以看到,demo.sh没有可执行权限;但是 bash demo.sh可以运行
    1
    2
    3
    4
    5
    $ ./demo.sh
    -bash: ./demo.sh: Permission denied

    $ bash ./demo.sh
    shell demo
  • 也可以通过chmod 修改权限
    1
    2
    3
    4
    5
    $ chmod 755 ./demo.sh 
    # or
    $ chmod u+x ./demo.sh # 给当前拥有者添加可执行权限
    $ ll
    -rwxr--r-- 1 root root 88 Apr 24 22:15 demo.sh

条件判断

字符串非空

  • n 测试是否为非空,需要””避免异常错误
    1
    2
    $ [ -n "$TEST" ] && echo Y || echo F
    Y
  • z 测试是否为空
    1
    2
    $ [-z $TEST] && echo Y

字符串比较

1
2
3
$ [ $USER == root ]
# or
$ test $USER == root

整数比较

  • -gt

    1
    2
    3
    $ [ 1 -gt 2 ]; echo $?
    1
    # $? 查看上一条命令结束码;0 正确 非0,false
  • -eq

  • -ne

  • -lt

  • -le

  • -ge (大于或等于)

文件属性判断

  • -e 文件或者目录是否存在

    1
    2
    $ [ -e get.sh ] && echo "存在" || echo "不存在"
    存在
  • -d 判断存在且为目录

  • -f

  • -L 软连接 (类似快捷键,跨分区,但是删除不可用;硬链接,相反;)

  • -p 管道

  • -r 读权限

  • -w 写权限

  • -x 执行权限;root 也必须有x,才能执行

  • -s 非空

[] 与 [[]]

  • 通用

    • 数值大小比较
      1
      2
      $ [ 5 -gt 8 ]
      $ [[ 5 -lt 8 ]]
    • 字符串非空比较
      1
      2
      3
      4
      $ [ -z "" ] && echo y || echo n 
      y
      $ [ -n '13' ] && echo y || echo n
      y
    • 文件属性
      1
      2
      $ [ 9.txt -nt get.sh ] && echo y || echo n
      $ [[ 9.txt -nt get.sh ]] && echo y || echo n
  • 不同

  • 逻辑运算&&

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ [[ 5 == 9 && 5 == 4 ]] && echo y || echo n 
    n

    # []使用&&
    $[ 5 == 9 && 5 == 4 ] && echo y || echo n
    -bash: [: missing `]'

    $[ 5 == 9 -a 5 == 4 ] && echo y || echo n
    n
  • 逻辑运算||

    1
    2
    $[[ 5 == 8 || 6 == 9 ]]
    $[ 5 == 8 -o 6 == 9 ]
  • 符号使用>,<

    1
    2
    $[[ 5 > 9 ]] - 排序比较
    $[ 5 > 9 ] - 部分支持
  • 正则使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 仅仅是字符比较
    $ test = '123'
    $ [ $test == 1* ] && echo y || echo n
    n

    # 正则比较
    $ [[ $test == 1* ]] && echo y || echo n
    y

    # a是否为数字
    $ a=2
    $[[ $a == [0-9] ]]&& echo y || echo n
    y
  • =~

    1
    2
    3
    4
     #  正则匹配,是否包含0-9
    $b='a23'
    $[[ $b =~ [0-9] ]]&& echo y || echo n
    y
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏