Shell—5.判断语句

条件判断

- -b 文件  文件是否存在 并且是否为块设备文件 是为真
- -c 文件  文件是否存在 并且是否为字符设备文件 是字符设备文件为真
- -d 文件  判断该文件是否存在 并且是否为目录文件
- -e 文件  判断文件是否存在
- -f 文件  判断该文件是否存在 并且是否为普通文件
- -L 文件  判断该文件是否存在 并且是否为符号连接文件
- -p 文件  判断该文件是否存在 并且是否为管道文件
- -s 文件  按断该文件是否存在 并且是否为空 空为真
- -S 文件  文件是否存在 并且是否为套接字文件
- -rxw    判断权限  当前用户

条件判断语法格式

- 格式1:test 条件表达式
- 格式2:[ 条件表达式 ]
- 格式3[[ 条件表达式 ]] 支持正则

- test -e /root/install.log
- [ -e /root/install.log ]
- [[ 条件表达式 ]]

- 说明:后两种格式 括号里两边都必须有空格
- 更多判断 man test查看 很多的参数都用来进行条件判断

 

文件判断

判断文件类型

- -e 判断文件是否存在(任何类型文件)
- -f 判断文件是否存在并且是一个普通文件
- -d 判断文件是否存在并且是一个目录
- -L 判断文件是否存在并且是一个软链接
- -b 判断文件是否存在并且是一个块设备文件
- -S 判断文件是否存在并且是一个套接字文件
- -c 判断文件是否存在并且是一个字符设备文件
- -p 判断文件是否存在并且是一个命名管道文件
- -s 判断文件是否存在并且是一个非空文件(有内容)



判断文件权限

- -r 当前用户对其是否可读
- -w 当前用户对其是否可写
- -x 当前用户对其是否可执行
- -u 是否有suid 高级权限冒险位
- -g 是否sgid 高级权限强制位
- -k 是否有t位 高级权限粘滞位

判断文件新旧

- file1 -nt file2 比较file1是否比file2新
- file1 -ot file2 比较file1是否比file2旧
- file1 -ef file2 比较是否为同一个文件 或者用于判断硬链接 是否指向同一个i节点inode

 

数据判断

整数判断

- 整数1 -eq 整数2 是否相等

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

--- 示例1 ---
ip=www.baidu.com

print -c1 $ip &>/dev/null
if [ $? -eq 0 ];then
        echo "$ip is up"
else
        echo "$ip is down"
fi


--- 示例2 ---

read -p "请输入要ping的IP地址:" ip

ping -c1 $ip &> /dev/null
if [ $? -eq 0 ];then
  echo "$ip is OK!"
else
  echo "$ip is error!"
fi

字符串判断

- 字串1 == 字串2
- 字串1 != 字串2

- -z      判断是否为空字符串 字符串长度为0则成立
- -n      判断是否为非空字符串 字符串长度不为0则成立

- string1 = string2      判断字符串是否相等
- string1 != string2     判断字符串是否不等
- 注意等号两侧有空格

- 字符串比较要使用双引号 [ "$username" = "root" ];echo $?
| 如果变量不存在会报语法错误

 

多重条件判断

- 判断1 -a 判断2    逻辑与 都成立为真
- 判断2 -o 判断2    逻辑或 一个成立为真
- !判断            逻辑非 使原始的判断取反

- shell中逻辑运算符没有优先级

- -a和&&   逻辑与  [ 1 -eq 1 -a 1 -ne 0 ]   [ 1 -eq 1 ] && [ 1 -ne 0 ]
- -o和||   逻辑或  [ 1 -eq 1 -o -ne 1 ] 

- 特别说明:
| && 前面的表达式为真 才会执行后面的代码
| || 前面的表达式为假 才会执行后面的代码
| ;  只用于分割


类C风格的数值比较

  • 注意: 在(())中, =表示赋值;==表示判断

字符串比较

  • 注意:双引号引起来,看做一个整体;=和==在[ 字符串 ] 比较中都表示判断
  • 注意:等号两侧有没有空格结果不一样 没空格结果是错的 不明白是什么意思

[]和[[]]区别

  • 在判断字符串为空的时候,[[]]不加双引号,不会报错
  • 用逻辑运算符连接两个表达式的时候,用一个括号可能会报错
posted @   梵高de画笔  阅读(54)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示