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

Shell中if的使用详解_与||的使用详解

一 IF使用详解

1 格式
1.1 单分支语句结构
if [ 条件表达式 ]; then指令 
fi
1.2 双分支语句结构
if [ 条件表达式 ]; then 指令一 
else 指令二 
fi
1.3 多分支语句结构
if [ -f file ]; thenecho "yes yes yes"
elif [ -z file ]; thenecho "yes yes"
elseecho "nonono"
fi

上面直接给出了多分支if语句的一个实例。从上面三个结构中可以看出,条件表达式的左右都要有空格

2 条件表达式的内容
2.1 字符串的判断
str1 = str2      当两个串有相同内容、长度时为真 
str1 != str2      当串str1和str2不等时为真 
-n str1        当串的长度大于0时为真(串非空) 
-z str1        当串的长度为0时为真(空串) 
str1           当串str1为非空时为真
2.2 数字的判断
int1 -eq int2    两数相等为真 
int1 -ne int2    两数不等为真 
int1 -gt int2    int1大于int2为真 
int1 -ge int2    int1大于等于int2为真 
int1 -lt int2    int1小于int2为真 
int1 -le int2    int1小于等于int2为真
2.3 文件的判断
-r file     用户可读为真 
-w file     用户可写为真 
-x file     用户可执行为真 
-f file     文件为正规文件为真 
-d file     文件为目录为真 
-c file     文件为字符特殊文件为真 
-b file     文件为块特殊文件为真 
-s file     文件大小非0时为真 
-t file     当文件描述符(默认为1)指定的设备为终端时为真
2.4 复杂逻辑判断

条件表达式中可能有多个条件,需要使用与或非等逻辑操作。

-a         与 
-o        或 
!        非
2.5 一个实例
if [ $score -ge 0 ]&&[ $score -lt 60 ];thenecho "sorry,you are lost!"
elif [ $score -ge 60 ]&&[ $score -lt 85 ];thenecho "just soso!"
elif [ $score -le 100 ]&&[ $score -ge 85 ];thenecho "good job!"
elseecho "input score is wrong , the range is [0-100]!"
fi

当然,上面的实例也可以用 -a 来改写:

if [ $score -ge 0 -a $score -lt 60 ];thenecho "sorry,you are lost!"
elif [ $score -ge 60 -a $score -lt 85 ];thenecho "just soso!"
elif [ $score -le 100 -a $score -ge 85 ];thenecho "good job!"
elseecho "input score is wrong , the range is [0-100]!"
fi

二 &&与||的使用

有时候,我们可以直接使用&&和||的组合来代替if表达式。

2.1 &&运算符
command1  && command2
  • 命令之间使用 && 连接,实现逻辑与的功能。
  • 只有在 && 左边的命令返回真,&& 右边的命令才会被执行。
  • 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。
2.2 ||运算符
command1 || command2
  • 命令之间使用 || 连接,实现逻辑或的功能。
  • 只有在 || 左边的命令返回假,|| 右边的命令才会被执行。
  • 只要有一个命令返回真,后面的命令就不会被执行。

比如在ARM的uboot的mkconfig文件中的如下语句:

[ "${BOARD_NAME}" ] || BOARD_NAME="$1"

这条语句的意思是如果BOARD_NAME这个变量是空的话(即前半部分条件判断返回为假),执行后边的赋值语句。

http://www.lryc.cn/news/2420219.html

相关文章:

  • PostScript文件
  • 虚拟化 | 使用VMware vCenter Converter快速将计算机从物理环境或其他虚拟化平台迁移到vSphere环境...
  • 各种常见编码的转换算法
  • 数据结构-用大白话讲清楚时间复杂度和空间复杂度
  • 标签特性attribute和元素节点属性property
  • Location 对象
  • 【超级干货】鸟哥笔记VS知乎刘锤:一个运营牛人的进化论
  • SVN客户端 创建分支/合并分支/切换分支
  • 2024年最全用Python创建多线程的几种方法_python类中创建两个线程
  • 解决 Windows 蓝屏错误 0x0000007B 的方法
  • 欧几里得辗转相除法证明及推论
  • Istanbul算法详解
  • 华为配置Hotspot2.0无线网络示例
  • 机器人坐标系基本概念
  • 华为技术实操 || DHCP实验
  • java中常用的5种设计模式
  • zTree学习笔记1---zTree从零搭建(新手基础教程)
  • Android Gson使用详解
  • Oracle对时间date,to_date(),to_char()的理解
  • IAR的基本使用教程
  • MySQL下载及安装最新版教程
  • 深入了解memcached缓存数据库
  • open-webui入门
  • RIL 机制---开篇
  • 一篇彻底学懂补码
  • Oracle 中 decode
  • 深层神经网络(DNN)的一些基本概念
  • 电子设计常识——阻抗
  • 【Go】并发编程之runtime包及其常用方法
  • UML建模工具安装详细教程(StarUML 5.0.2)