侧边栏壁纸
博主头像
与晚风述往事博主等级

万般皆下品,唯有读书高。

  • 累计撰写 149 篇文章
  • 累计创建 29 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

Shell 条件表达式的使用

与晚风述往事
2021-10-19 / 0 评论 / 1 点赞 / 302 阅读 / 1,838 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-10-19,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

介绍

条件表达式可以是一元的,也可以是二元。一元表达式常用于检查文件状态、字符串运算、数字运算。

使用

检查文件状态参数

  • -a 文件存在,则为真(TRUE)。

  • -b 文件存在并且是块设备,则为真(TRUE)。

  • -c 文件存在并且是字符设备,则为真(TRUE)。

  • -d 文件存在并且是目录,则为真(TRUE)。

  • -e 文件存在,则为真(TRUE)。跟-a的作用一致。

  • -f 文件存在并且是常规文件,则为真(TRUE)。

  • -g 文件存在并且有设置set-group-id位,则为真(TRUE)。

  • -h 文件存在并且是符号链接,则为真(TRUE)。

  • -k 文件存在并且设置了sticky,则为真(TRUE)。

  • -p 文件存在并且是命名管道(FIFO),则为真(TRUE)。

  • -r 文件存在并且权限是可以读的,则为真(TRUE)。

  • -s 文件存在并且大小大于0,则为真(TRUE)。

  • -t 文件存在并且文件描述符fd已打开并指向终端,则为真(TRUE)。

  • -u 文件存在并且设置了set-user-id位,则为真(TRUE)。

  • -w 文件存在并且权限是可以写的,则为真(TRUE)。

  • -x 文件存在并且权限是可执行的,则为真(TRUE)。

  • -G 文件存在并且拥有者是有效的组ID,则为真(TRUE)。

  • -L 文件存在并且是符号链接,则为真(TRUE)。

  • -N 文件存在并且自上次读取以来已被修改,则为真(TRUE)。

  • -O 文件存在并且拥有者是有效的用户ID,则为真(TRUE)。

  • -S 文件存在并且是套接字,则为真(TRUE)。

  • file1 -ef file2 文件1和文件2引用相同的设备和inode编号,则为真(TRUE)。

  • file1 -nt file2 文件1比文件2新(根据修改日期),或者文件1存在而文件2不存在,则为真(TRUE)。

  • file1 -ot file2 文件1比文件2旧(根据修改日期),或者文件2存在而文件1不存在,则为真(TRUE)。

检查文件状态示例

下面是一个判断文件是否存在的shell脚本,若/usr/local/src/test.sh文件存在,就会将“文件已存在”打印到控制台,反之,则打印“文件不存在”。

value=/usr/local/src/test.sh

if [ -a "${value}" ];then
  echo "文件已存在"
else
  echo "文件不存在"
fi

执行过程如下:
shell_conditional_expression_1

字符串运算

  • -v shell变量存在,则为真(TRUE)。

  • -R shell变量存在并且名称被引用,则为真(TRUE)。

  • -z 字符串的长度为0,则为真(TRUE)。

  • -n 字符串的长度非0,则为真(TRUE)。

  • string1 == string2 字符串相等,则为真(TRUE)。

  • string1 = string2 字符串相等,则为真(TRUE)。单个等号字符的情况下,应该跟test命令一起使用,来确保POSIX一致性。

  • string1 != string2 字符串不相等,则为真(TRUE)。

  • string1 < string2 字符串按字典顺序排在string2之前,则为真(TRUE)。

  • string1 > string2 字符串按字典顺序排在string2之后,则为真(TRUE)。

字符串运算示例

该脚本时判断两个字符串是否相等,若参数aaa和参数bbb的值相等,就会将“变量相等”打印到控制台,反之,则打印“变量不相等”。

aaa=age
bbb=ccc

if [ "$aaa" == "$bbb" ];then
  echo "变量相等"
else
  echo "变量不相等"
fi

执行过程如下:
shell_conditional_expression_2

数字运算

数字运算时,两边的数字必须是正整数或负整数。

注意,当和[[一起使用时,两边的数字被作为算术表达式计算。

  • -eq 两边的数字相等,则为真(TRUE)。
  • -ne 两边的数字不相等,则为真(TRUE)。
  • -lt 左边数字小于右边数字,则为真(TRUE)。
  • -le 左边数字小于或等于右边数字,则为真(TRUE)。
  • -gt 左边数字大于右边数字,则为真(TRUE)。
  • -ge 左边数字大于或等于右边数字,则为真(TRUE)。

数字运算示例

该脚本是判断参数a和参数b的值是否相等,若参数值相等,就会将“相等”打印到控制台,反之,则打印“不等于”。

a=3
b=5

if [ "$a" -eq "$b"  ];then
  echo "等于"
else
  echo "不等于"
fi

执行过程如下:
shell_conditional_expression_3

1

评论区