当前位置: 首页 > java >正文

【Linux】shell的条件判断

目录

一.使用逻辑运算符判定命令执行结果

二.条件判断方法 

三.判断表达式

3.1文件判断表达式

3.2字符串测试表达式

3.3整数测试表达式

3.4逻辑操作符


一.使用逻辑运算符判定命令执行结果

  • && 在命令执行后如果没有任何报错时会执行符号后面的动作
  • || 在命令执行后如果命令有报错会执行符号后的动作


二.条件判断方法 

使用测试语句来测试条件表达式的条件真假

实验代码
test "$a" = "$b" && echo yes || echo no    #test
no
[ $a = $b ] && echo yes || echo no    #[]
no
[[ $a =~ 2|10 ]] && echo yes || echo no    #[[]]
yes
(( $a < 0 | $a > 10 )) && echo yes || echo no    #(())
yes


三.判断表达式

3.1文件判断表达式

以下是常用的文件测试操作符

 实验代码

#检测文件是否存在
[ -a "/mnt/fjw" ] && echo yes || echo no
no
touch fjw
[ -a "/mnt/fjw" ] && echo yes || echo no
yes
[ -e "/mnt/fjw" ] && echo yes || echo no
yes#检测文件是否为块设备
[ -b "/dev/sda" ] && echo yes || echo no
yes#检测文件是否为字符设备
[ -c "/dev/pts/0" ] && echo yes || echo no
yes
[ -c "/dev/tty0" ] && echo yes || echo no
yes#检测是否为链接文件
ln -s fjw yyy
[ -L "/mnt/yyy" ] && echo yes || echo no
yes#检测是否为目录
[ -d "/mnt/" ] && echo yes || echo no
yes#检测是否为普通文件
[ -f "/mnt/" ] && echo yes || echo no
no
[ -f "/mnt/yyy" ] && echo yes || echo no
yes#检测是否为套接字
find / -type -s   #查找为套接字的文件
ls -l /run/systemd/journal/dev-log
srw-rw-rw-. 1 root root 0 May 31 11:39 /run/systemd/journal/dev-log 
[ -S "/run/systemd/journal/dev-log" ] && echo yes || echo no        #-S 为检测套接字
yes#检测文件是否设置了suid位
[ -u /mnt/fjw ]&& echo yes || echo no
yes#检测文件是否可读,可写,可执行
[ -r /mnt/fjw ] && echo yes || echo no
yes
[ -w /mnt/fjw ] && echo yes || echo no
yes
[ -x /mnt/fjw ] && echo yes || echo no
no#检测两个文件的新旧
[ "fjw" -nt "fjwyyy" ] && echo yes || echo no
no
[ "fjw" -ot "fjwyyy" ] && echo yes || echo no
yes#检测两个文件的节点号是否相同
ls -i    #查看文件节点号
[ "fjw" -ef "fjwtest" ] && echo yes || echo no
yes


3.2字符串测试表达式

常用的判断字符串操作符

#检测字符串是否为空
a=""
b=1
[ -z "$a" ] && echo yes || echo no
yes
[ -n "$a" ] && echo yes || echo no
no#检测字符串是否相等
[ "$USER" = "root" ] && echo yes || echo no
yes
su - yyy
[ "$USER" = "root" ] && echo yes || echo no
no


3.3整数测试表达式

常用的判断整数操作符

这里只拿[]与(())来做演示

#[]
a=1
[ "$a" -eq "1" ] && echo yes || echo no
yes
[ "$a" -ne "1" ] && echo yes || echo no
no
[ "$a"  -gt "2" ] && echo yes || echo no
no
[ "$a"  -ge "2" ] && echo yes || echo no
no
[ "$a"  -lt "2" ] && echo yes || echo no
yes
["$a"  -le "2" ] && echo yes || echo no
yes#(())
a=1
(($a==2)) && echo yes || echo no    #这里要用==,使用=会识别成赋值
no
(($a==2)) && echo yes || echo no
no
(($a!=2)) && echo yes || echo no
yes
(($a>2)) && echo yes || echo no
no
(($a>=2)) && echo yes || echo no
no
(($a<2)) && echo yes || echo no
yes
(("a"<="2")) && echo yes || echo no
yes


3.4逻辑操作符

[ ! -e /mn ] && echo yes
yesa=5
[ "$a" -lt "10" -a "$a" -gt "0" ] && echo yes || echo no
yes
[[ "$a" -lt "10" && "$a" -gt "0" ]] && echo yes || echo no
yes
[[ $a < 10 && $a > 0 ]] && echo yes || echo no
no
(($a<10 && $a>0)) && echo yes || echo no
yes
(($a<3 || $a>10)) && echo yes || echo no
no

http://www.xdnf.cn/news/10313.html

相关文章:

  • gin 常见中间件配置
  • 系统思考:整体观和心智模式
  • Chrome 通过FTP,HTTP 调用 Everything 浏览和搜索本地文件系统
  • 基于STM32单片机CO气体检测
  • C56-亲自实现字符串拷贝函数
  • python连接邮箱,下载附件,并且定时更新的方案
  • SSM框架前后端网站显示不出来图片
  • stm32——SPI协议
  • 随机响应噪声-极大似然估计
  • 飞腾D2000与FPGA结合的主板
  • C语言基础(08)【循环结构】
  • 吴恩达MCP课程(2):research_server
  • 深入剖析Java类加载机制:双亲委派模型的突破与实战应用
  • 头歌java课程实验(Java面向对象 - 包装类)
  • C++语法系列之右值
  • vedio.ontimeupdate()和video.onloadeddata()
  • C++二叉树常见OJ题分析
  • 2025-05-31 Python深度学习10——模型训练流程
  • 一些常用的命令
  • 1.JS逆向简介
  • JSR 303(即 Bean Validation)是一个通过​​注解在 Java Bean 上定义和执行验证规则​​的规范
  • 704SJBH蓝天影院订票网站的设计
  • 极智项目 | 多模态大模型推理平台-Streamlit版(支持Qwen2.5/InternVL3/KimiVL三大模型)
  • b. 组合数
  • 第3节 Node.js 创建第一个应用
  • 六.MySQL增删查改
  • JWT 入门
  • 利用nginx完成iframe请求的身份认证
  • 【NLP 78、手搓Transformer模型结构】
  • Namespace 命名空间的使用