shell基础-03 测试条件(文件测试、数值比较、字串比较、是否包含)

1. 语法

1.1 基本语法

[ 条件表达式 ] 推荐使用

[[ 条件表达式 ]] 该法支持正则

1.2 与

使用 -a&&

[ 条件表达式1 -a 条件表达式2 ]

[ 条件表达式1 ] && [ 条件表达式2 ]

1.3 或

使用 -o||

[ 条件表达式1 -o 条件表达式2 ]

[ 条件表达式1 ] || [ 条件表达式2 ]

2. 文件测试

2.1 语法

[ -e dir|file ] 测试文件是否存在

[ -d dir ] 测试是否是目录

[ -f file ] 是否存在,而且是文件

[ -r file ] 当前用户对该文件是否有读权限

[ -x file ] 当前用户对该文件是否有执行权限

[ -w file] 当前用户对该文件是否有写权限

[ -L|h file ] 当前文件是否是一个链接,等价于-h

2.2 示例

  • 示例1

判断文件是否存在

[root@liubei ~]# [ -e /etc/passwd ]
[root@liubei ~]# echo $?
0
[root@liubei ~]# [ -e /etc/hello ]
[root@liubei ~]# echo $?
1
  • 示例2

如果目录/tmp/hello不存在,则创建文件夹

if [ ! -d "/tmp/hello" ]; then mkdir /tmp/hello; fi

3. 数值比较:

3.1 shell风格

  • 比较符号

-eq 等于, -ne 不等于
-lt 小于, -gt 大于
-le 小于等于,-ge 大于等于

  • 示例
# [ 100 -gt 20 ]
# echo $?
0

3.2 C语言风格比较

  • 语法
    ((M<N))

两层括号
可以直接用符号链接,不必在意空格

  • 示例
[root@liubei ~]# ((100>20))
[root@liubei ~]# echo $?
0
[root@liubei ~]# ((100<20))
[root@liubei ~]# echo $?
1

4. 字串比较

4.1 判断字符串长度是否为0

注意:空值和未定义都为0

  • 语法

[ -z $变量 ]

  • 示例

判断是否输入用户名

#!/bin/bash
read -p "input name : " user_a
if [ -z $user_a ]
  then
    echo "null"
  else
    echo "ok"
fi

4.2 比较两个字串是否相同:

  • 语法

[ $变量 = “值” ]

[[ $USER = “root” ]] 支持正则

注意:等号两边必须空格

  • 示例
#!/bin/bash
read -p "input name : " user_a
if [ $user_a = "root" ]
  then
    echo "OK"
  else
    echo "NO"
fi

输入 root 则输出OK,输入其他用户名则输出NO

  • 示例2: [[ ]]支持正则
#!/bin/bash
read -p "input name : " user_a
if [[ $user_a = "root" ]]
  then
    echo "OK"
  else
    echo "NO"
fi

输出如下:

[root@liubei tmp]# bash test.sh
input name : rooooot
OK
  • 示例3:逻辑运用

输入 root 或 liubei 则输出OK,输入其他用户名则输出NO

#!/bin/bash
read -p "input name : " user_a
if [ $user_a = "root" -o $user_a = "liubei" ]
  then
    echo "OK"
  else
    echo "NO"
fi

#!/bin/bash
read -p "input name : " user_a
if [ $user_a = "root" ] || [ $user_a = "liubei" ]
  then
    echo "OK"
  else
    echo "NO"
fi

5. 是否包含

  • 语法

[[ "字串" =~ 要查询字串 ]]
或者
[[ 变量 =~ 要查询字串 ]]

注意:
该判必须是 [[ ]],要查询部分支持正则

  • 示例

判断输入的用户是否以 r 开头

#!/bin/bash
read -p "input name : " user_a
if [[ $user_a =~ ^r ]]
  then
    echo "OK"
  else
    echo "NO"
fi

posted on 2021-09-18 14:20  运维开发玄德公  阅读(10)  评论(0编辑  收藏  举报  来源

导航