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

【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

相关文章:

  • linux信号详解
  • 用Python实现一个简单的远程桌面服务端和客户端
  • LCA(最近公共祖先)与树上差分
  • debian12.9或ubuntu,vagrant离线安装插件vagrant-libvirt,20250601
  • Java流【全】
  • 【计网】第六章(网络层)习题测试
  • Cesium快速入门到精通系列教程三:添加物体与3D建筑物
  • linux系统中防火墙的操作
  • 进阶日记(一)大模型的本地部署与运行
  • vue3常用组件有哪些
  • BFS入门刷题
  • STM32——CAN总线
  • 飞牛fnNAS存储空间模式详解
  • P4549 【模板】裴蜀定理
  • Linux --进程状态
  • 利用多进程定时播放,关闭音乐播放器
  • 2025 年 AI 技能的全景解析
  • Hilbert曲线
  • XCPC 常用技巧
  • 中国风展示工作总结商务通用PPT模版
  • 自己怎么做直播网站/百度官方客服
  • 鹰潭律师网站建设/中国seo网站
  • 自己制作公司官网/昆明seo
  • 信誉好的扬中网站建设/万词优化
  • 卫浴网站设计/新手如何自己做网站
  • 怎么看一家网站是谁做的/小说搜索风云榜排名