一、条件判断语句

1.条件判断语法格式:

- 格式1: test 表达式
 - 格式2: [ 条件表达式 ]         
 - 格式3:[[ 条件表达式 ]] 支持正则
 注意:条件表达式与中括号之间有空格
      man test查看, 很多参数都可以用来进行条件判断
  • 格式1:
echo $?为0,代表上一条命令为真,echo $?为1,代表上一条明林为假

shell grep多个关键字 shell grep多个条件判断_shell

  • 格式2:
  • 格式3:

2.条件判断相关参数

【1】文件类型判断

-e

判断文件是否存在(任何类型文件)

-f

判断文件是否存在并且是一个普通文件

-d

判断文件是否存在并且是一个目录

-L

判断文件是否是一个软链接文件

-b

判断文件是否存在并且是一个块设备文件

-S

判断文件是否存在并且是一个套接字文件

-c

判断文件是否存在并且是一个字符文件

-p

判断文件是否存在并且是一个命名管道文件

-s

判断文件是否存在并且是一个非空文件

文件类型判断

[ -f file1 ];echo $?         # 判断file1是否为普通文件 
[ -d file1 ];echo $?         # 判断file是否为目录
[-L file3 ];echo $?          # 判断file3是否为软链接 
[ ! -d dir1 ];echo $?        # 判断dir1是否不是目录
[[ -f file1 ]];echo $?       # 判断file1是否为普通文件
[ -e file1 ];echo $?         # 判断file1是否存在
  • 判断文件是否存在(任何类型文件)
  • 判断文件是否存在并且是一个普通文件
  • 判断文件是否存在并且是一个目录
  • 判断文件是否存在并且是一个软链接文件:

    当file1删除时,file4依然是一个软连接文件:

    但此时file4不存在:

    注意:判断软连接时,如果原文件不存在,-L并不能检测出。故需要先用-e判断文件是否有效(存在),随后再用-L判断此文件是否为一个软连接
    【2】:文件权限判断

-r

当前用户对其是否有读权限

-w

当前用户对其是否有写权限

-x

当前用户对其是否有执行权限

-u

当前用户对其是否有suid特殊权限(高级权限冒险位)

-g

当前用户对其是否有guid特殊权限(高级权限强制位)

-k

当前用户对其是否有o+t特殊权限(高级权限粘滞位)

  • 当前用户对其是否有读权限
  • 当前用户对其是否有写权限
  • 当前用户对其是否有执行权限
  • 当前用户对其是否有suid特殊权限(高级权限冒险位)
  • 当前用户对其是否有o+t特殊权限(高级权限粘滞位)
    注意:/tmp目录是linux系统中使用o+t权限的目录:

    注意:/usr/bin/passwd是linux系统中使用u+s权限的文件:

【3】文件新旧判断

file1 -nt file2

比较file1是否比file2新

file1 -ot file2

比较file1是否比file2旧

file1 -ef file2

比较是否为同一个文件,或者用于判断硬连接,是否指向同一个inode

注意:这里的新旧指的是文件的修改时间。

shell grep多个关键字 shell grep多个条件判断_运维_02


shell grep多个关键字 shell grep多个条件判断_linux_03


shell grep多个关键字 shell grep多个条件判断_运维_04


【4】判断整数

-eq

相等

-ne

不相等

-gt

大于

-ge

大于等于

-lt

小于

-le

小于等于

shell grep多个关键字 shell grep多个条件判断_shell grep多个关键字_05


注意: 反响单引号 `` ,代表获取命令的执行结果

shell grep多个关键字 shell grep多个条件判断_linux_06


【5】判断字符串

-z

判断是否为空字符串,字符串长度位0

-n

判断是否为非空字符串,字符串长度大于0

string1 = string2

判断字符串是否相等

string1 != string2

判断字符串是否不相等

shell grep多个关键字 shell grep多个条件判断_运维_07


shell grep多个关键字 shell grep多个条件判断_当前用户_08


shell grep多个关键字 shell grep多个条件判断_当前用户_09


重点:shell编程中,判断字符转书否相等,=和==均可。

3.多重条件判断

【1】-a 和 &&     逻辑与,全真则真
举例:[ -f /etc/passswd -a -f /etc/group] 
      [ -f /etc/passwd ] && [ -f /etc/group ]
【2】-o 和        || 逻辑或,全假则假
举例:[ -f /etc/passswd -o -f /etc/group ]
     [ -f /etc/passwd ] || [ -f /etc/group ]

注意:&& 前面的表达式为真,才会执行后面的代码, || 前面的表达式为假,才会执行后面的代码

shell grep多个关键字 shell grep多个条件判断_linux_10


shell grep多个关键字 shell grep多个条件判断_linux_11