一 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这个变量是空的话(即前半部分条件判断返回为假),执行后边的赋值语句。

Shell中if的使用详解_与||的使用详解相关推荐

  1. Linux之shell中的大括号、中括号、小括号的使用详解+多示例

    摘要:很多人和我一样对于shell的各种括号的各种用法肯定不是很清楚,有时候看见别人脚本都不知道是什么意思,今天就来说说bash中的大中小括号的用法和解释,本人常用bash所以也只能用bash来说明了 ...

  2. shell中文件路径用变量定义_环境变量

    环境变量可以使得 bash shell 存储有关 shell 会话和工作环境的信息,允许在内存中存储数据. 在 bash shell 中,环境变量分为: 全局变量 局部变量 全局变量对 shell 会 ...

  3. java executors 详解_线程池—Executors 详解

    各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题 线 ...

  4. python def函数报错详解_【python】详解python函数定义 def()与参数args、可变参数*args、关键参数**args使用实例...

    Python内置了很多函数,可以直接调用.Python内置的函数可以通过官方文档查看.也可以通过help()查看帮助信息.函数名是指向函数对象的引用,把函数名赋给变量,相当于给函数起了别名. 1. 定 ...

  5. sscanf函数用法详解_「MOS考点详解」一道例题详解GETPIVOTDATA函数的用法

    要点提示 GETPIVOTDATA函数是MOS Excel认证考试的重要考点.资深Office培训师谷月老师在此借助一道例题详细解读这个函数. 例题 在「按地区」工作表上的单元格 H3 中,使用 GE ...

  6. python发邮件详解_用Python3发送邮件详解

    [整个邮件系统是怎样工作的] 邮件自互联网诞生之初就有了,它和web服务一样也是采用的c/s架构,比如我们常见的邮件客户端有outlook.foxmail这些邮件客户端软件. 当我们要发邮件时客户端就 ...

  7. yuv420p 详解_视频格式YUV详解

    什么是YUV YUV(也称YCbCr)是电视系统所采用的一种颜色编码方法.其中 Y 表示明亮度,也就是灰阶值,它是基础信号:U 和 V 表示的则是色度,UV 的作用是描述影像色彩及饱和度,它们用于指定 ...

  8. java executors 详解_线程池Executors详解

    为什么要用线程池呢? 一是减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务; 二是可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为因为消耗过多的内存,而把服务器累 ...

  9. sh执行文件 参数传递_详解shell中脚本参数传递的两种方式

    方式一:$0,$1,$2.. 采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${ ...

最新文章

  1. P2P中DHT网络原理
  2. 不信任的 .exe 怎么办,用 Windows 沙盒啊!
  3. JQUERY解析XML IE8的兼容问题
  4. 字符串10进制、16进制、ASSIC的互转
  5. 计算机网络链接的主要目标 主要功能,计算机网络课程教案‌.doc
  6. 测试~在使用共通处理时,需要注意的问题 ~ 使用前,清空Form中的值。
  7. SpringMVC之“HelloWorld”起步
  8. python zfill_Python字符串zfill()
  9. 文本分类——NaiveBayes
  10. mysql 索引超出范围_java.sql.SQLException:列索引超出范围,0 1
  11. TCP和HTTP的区别和联系
  12. itunes一直显示正在验证iphone恢复_超全面iPhone实用技巧汇总,有用收藏
  13. matlab打开图片无效的文件名,Matlab - 使用textscan错误(文件标识符无效)
  14. webstorm 2017 激活破解方法大全
  15. 3d打印利器FreeCAD入门教程之二----乐高积木块建模操作篇
  16. 用了三年teambition的我,为什么改用飞项了?
  17. 交易者应该学习的东西
  18. 【Android控件】HorizontalScrollView的基础使用记录(滚动条自定义)
  19. JAVA基础知识——方法的参数,特殊数据类型,装箱和拆箱...
  20. 配置网络连接之桥接模式

热门文章

  1. 【Python学习】程序练习《购物车程序》
  2. 计算机快捷键大全列表6,常用的快捷键大全(IT)
  3. 实用帖!22个无版权、免费、高清图片素材网站整理!(合集)
  4. 3分钟掌握7个XD基础操作
  5. [转]熊绎:我看软件工程师的职业规划
  6. Ubuntu 下 LaTeX 图形环境的配置——使用Kile
  7. [DP优化之平行四边形不等式]例题
  8. ubuntu18.04安装中中文输入法
  9. 入行游戏建模,做场景建模师必备软件有哪些?有无发展前景
  10. 随机森林python实例_用Python实现随机森林算法的示例