一、if 的基本语法


  1. if [ command ];then
  2. xxx
  3. elif [ command ];then
  4. xxx
  5. else
  6. xxx
  7. fi

二、常见的一些写法案例

1、if [ "x${var}" = "x" ]

其实就是判断${var}是否为空的意思

2、if [ X"$?" == X"0" ]

其实就是判断$?是否为0,即判断执行结果是否正确

3、 if [ ! -x "$PRGDIR"/ "$EXECUTABLE" ]; then  #!是非条件,即非(-x "$PRGDIR"/ "$EXECUTABLE")是否为真。总体含义是 判断脚本catalina.sh是否存在并有可执行权限,没有执行权限就退出。

4、[ -z "$CATALINA_HOME" ]: -z   在中括号中判断字符串变量的值是否为空,为空则为真。

5、-d filename:如果 filename为目录,则为真,作用比如判断目录是否存在

如下,判断run_dir目录是否存在:

三、文件和目录的判断


  1. ------------------------- 常用的-----------------------------------------------
  2. [ -e file ] 如果 file 存在,则为真。
  3. [ -d DIR ] 如果 file 存在且是一个目录,则为真。
  4. [ -f file ] 如果 file 存在且是一个普通文件,则为真。
  5. [ -r file ] 如果 file 存在且是可读的,则为真。
  6. [ -w file ] 如果 file 存在且是可写的,则为真。
  7. [ -x file ] 如果 file 存在且是可执行的,则为真。
  8. [ -s file ] 如果 file 存在且大小不为0,则为真。
  9. [ -L file ] 如果 file 存在且是一个符号连接,则为真。
  10. [ -h file ] 如果 file 存在且文件是软链接,则为真。
  11. [ file1 -ot file2 ] 如果 file1 比 file2 要老, 或者 file2 存在且 file1 不存在,则为真。
  12. [ file1 -nt file2 ] 如果 file1 比 file2 要新,则为真。
  13. ------------------------- 以下不太常用 --------------------------------------------
  14. [ -b file ] 如果 file 存在且是一个块特殊文件,则为真。
  15. [ -c file ] 如果 file 存在且是一个字特殊文件,则为真。
  16. [ -g file ] 如果 file 存在且已经设置了SGID,则为真。
  17. [ -k file ] 如果 file 存在且已经设置了粘制位,则为真。
  18. [ -p file ] 如果 file 存在且是一个名字管道(F如果O),则为真。
  19. [ -t FD ] 如果文件描述符 FD 打开且指向一个终端,则为真。
  20. [ -u file ] 如果 file 存在且设置了SUID (set user ID),则为真。
  21. [ -O file ] 如果 file 存在且属有效用户ID,则为真。
  22. [ -G file ] 如果 file 存在且属有效用户组,则为真。
  23. [ -N file ] 如果 file 存在 and has been mod,如果ied since it was last read则为真。
  24. [ -S file ] 如果 file 存在且是一个套接字,则为真。
  25. [ file1 -ef file2 ] 如果 file1 和 file2 指向相同的设备和节点号,则为真。

四、字符串的判断

字符串批较时,变量一定要用 双引号。


  1. [ -z "str" ] 如果str的长度为零,则为真 ,即判断是否为空,空即是真;
  2. [ -n "str" ] 如果str的长度非零,则为真 ,即判断是否为非空,非空即是真;
  3. [ "str1" = "str2" ] 如果两个字符串相同,则为真;
  4. [ "str1" != "str2" ] 如果字符串不相同,则为真;
  5. [ "str1" ]  如果字符串不为空,则为真,与-n类似。

案例:


  1. if [ -z "$path" ]; then
  2. echo "path不能为空,请指定path"
  3. fi
  4. if [ "$opt" != "-" ]&&[ "$opt" != "+" ]; then
  5. echo "opt只能取值-或+" 1>&2
  6. exit 1;
  7. fi

五、数值比较

数值的比较千万不要使用大于号、小于号,数值的比较只能使用 -eq 、-gt 等。


  1. [ num1 -eq num2 ] num1 和 num2 两数相等为真 , =
  2. [ num1 -ne num2 ] num1 和 num2 两数不等为真 ,!=
  3. [ num1 -gt num2 ] num1 大于 num1 为真 , >
  4. [ num1 -ge num2 ] num1 大于等于num2 为真, >=
  5. [ num1 -lt num2 ] num1 小于n um2 为真 , <
  6. [ num1 -le num2 ] num1 小于等于 num2 为真, <=

案例:


  1. if [ ${num1} -gt ${num2} ]; then
  2. echo "[相对目录]的长度应该小于[文件路径]的长度"
  3. exit 1
  4. fi

注:本文引用的是:shell 语言中的 if 条件判断_猎人在吃肉的博客-CSDN博客_shellif判断

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux31510 人正在系统学习中

[转帖]总结:shell中的if条件判断的更多相关文章

  1. linux Shell中常用的条件判断

    linux Shell中常用的条件判断 -b file            若文件存在且是一个块特殊文件,则为真 -c file            若文件存在且是一个字符特殊文件,则为真 -d ...

  2. bash Shell 中如何实现条件判断之if判断

    http://blog.51cto.com/lovelace/1211353 bash中如何实现条件判断?条件测试类型:    整数测试    字符测试    文件测试 一.条件测试的表达式:     ...

  3. shell编程学习笔记(八):Shell中的if条件判断

    编程语言中都有条件判断,shell编程也不例外,下面我们来看一下shell中应该怎么使用if条件判断 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts ...

  4. shell编程学习笔记(九):Shell中的case条件判断

    除了可以使用if条件判断,还可以使用case 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts # vim script08.sh 开始编写scrip ...

  5. shell中的常用条件判断

    -e :该“文件名”是否存在.exit-d :该文件名是否为目录.dir-f  :该文件名是否为普通文件.file -b:该文件是否为块文件.block -r :该文件是否具有可读属性 read-w ...

  6. Shell中[]里面的条件判断

    1.字符串判断 str1 = str2 当两个串有相同内容.长度时为真 str1 != str2 当串str1和str2不等时为真 -n str1 当串的长度大于0时为真(串非空) -z str1 当 ...

  7. centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课

    centos   shell脚本编程1 正则  shell脚本结构  read命令  date命令的用法  shell中的逻辑判断  if 判断文件.目录属性  shell数组简单用法 $( ) 和$ ...

  8. SHELL学习笔记----IF条件判断,判断条件

    SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外.  if list then           do something here   ...

  9. [转帖]Linux shell中2>&1的含义解释 (全网最全,看完就懂)

    Linux shell中2>&1的含义解释 (全网最全,看完就懂) https://blog.csdn.net/zhaominpro/article/details/82630528   ...

  10. shell编程基础(3)条件判断语句

    1,带参数的shellscript #this is program build 5.11 to test shell script ############ cxz ####### 5.11 ### ...

随机推荐

  1. Spring Boot结合Element UI前后端分离的aixos的简单操作

    1:axios是什么? 基于promise用于浏览器和node.js的http客户端 axios官网:http://www.axios-js.com/  2:准备工作: 安装axios:npm ins ...

  2. P9344 去年天气旧亭台 代码

    不带滚动数组代码: #include <iostream> #include <cstdio> #include <cstring> #define int lon ...

  3. CUDA个人入坟笔记

    CUDA是建立在NVIDIA的GPUs上的一个通用并行计算平台和编程模型,基于CUDA编程可以利用GPUs的并行计算引擎来更加高效地解决比较复杂的计算难题.近年来,GPU最成功的一个应用就是深度学习领 ...

  4. Feign源码解析5:loadbalancer

    背景 经过前面几篇的理解,我们大致梳理清楚了FeignClient的创建.Feign调用的大体流程,本篇会深入Feign调用中涉及的另一个重要组件:loadbalancer,了解loadbalance ...

  5. 第十二部分_强悍的sed

    一.文件编辑器知多少 Windows系统​ ​ UltraEdit等 Linux系统 ​ vim vi gedit nano emacs 二.强悍的sed介绍 1. sed用来做啥? sed是Stre ...

  6. 昇腾CANN 7.0 黑科技:大模型推理部署技术解密

    本文分享自华为云社区<昇腾CANN 7.0 黑科技:大模型推理部署技术解密>,作者:昇腾CANN. 近期,随着生成式AI.大模型进入公众视野,越来越多的人意识到抓住AI的爆发就是抓住未来智 ...

  7. MongoDB经典故障系列六:CPU利用率太高怎么办?

    每逢电商大促,全民狂欢,但热闹是属于疯狂剁手的人们.而开发者们有的缺是"高流量.高访问.高并发"三高下带来的种种问题.为了应对大促期间的高I/O情况,企业会选择MongoDB云数据 ...

  8. CG行业云渲染服务的演进之路

    摘要:影视动画.特效制作等行业渲染需求量增多,4K/6K以及各高分辨率会陆续成为主流,本地算力与存储资源已无法满足现有任务量.而随着大环境的演变,CG行业发展已进入发展快车道.来自赞奇科技的CEO金伟 ...

  9. 大力出奇迹,揭秘昇腾CANN的AI超能力

    摘要:CANN(Compute Architecture for Neural Networks)异构计算架构,是以提升用户开发效率和释放昇腾AI处理器极致算力为目标,专门面向AI场景的异构计算架构. ...

  10. 前端资源共享方案对比-笔记:iframe/JS-SDK/微前端

    前端页面资源如何分享,常见的有iframe,其次是js-sdk.这两类的在地图类工具经常用.微前端是最佳比较火的方式.本篇是他们的对比分析. 下一篇讲 BK-VISION如何在让用户自由选择 ifra ...