首页 > 系统相关 >[转帖]shell编程-条件判断

[转帖]shell编程-条件判断

时间:2024-04-04 09:15:45浏览次数:15  
标签:文件 shell 是否 编程 整数 echo 转帖 判断 yes

1. 按照文件的类型进行判断

判断选项作用
-b 文件判断该文件是否存在,并且是否为块设备文件(是块设备文件为真)。
-c 文件判断该文件是否存在,并且是否为字符设备文件(是字符设备文件为真)。
-d 文件判断该文件是否存在,并且是否为目录文件(是目录文件为真)。
-e 文件判断该文件是否存在(存在为真)。
-f 文件判断该文件是否存在,并且是否为普通文件(是普通文件为真)。
-L 文件判断该文件是否存在,并且是否为符号链接文件(是符号链接文件为真)。
-p 文件判断该文件是否存在,并且是否为管道文件(是管道文件为真)。
-s 文件判断该文件是否存在,并且是否为非空(非空为真)。
-S 文件判断该文件是否存在,并且是否为套接字文件(是套接字文件为真)。

判断格式有两种:

  • test 判断选项 文件
  • [ 判断选项 文件]

注意:[ ] 内部两侧都必须有空格。

预定义变量$?中保存了上一条命令的执行结果(0表示执行正确;非0表示执行错误)。

因此,可用 $? 知道上一条命令的执行(判断)结果(0表示存在,非0表示不存在)。

示例:

test -e /root/install.log
echo $?

[ -e /root/install.log123 ]
echo $?

[ -d /root ] && echo "yes" || echo "no"
如果/root是目录,则打印yes,否则,打印no。
# 输出yes

[ -e /root ] && echo yes || echo no
判断/root是否存在。
# 输出yes

[ -f /root ] && echo yes || echo no
判断/root是否为普通文件。
# 输出no

    2. 按照文件的权限进行判断

    只要所有者、所属组、其他人中的任何一个用户有相应的权限,判断结果就为真。

    判断选项作用
    -r 文件判断文件是否存在,并且是否有读权限。
    -w 文件判断文件是否存在,并且是否有写权限。
    -x 文件判断文件是否存在,并且是否有执行权限。
    -u 文件判断文件是否存在,并且是否有SUID权限。
    -g 文件判断文件是否存在,并且是否有SGID权限。
    -k 文件判断文件是否存在,并且是否有SBIT权限。

    示例:

    [ -w /root/a.txt ] && echo yes || echo no       
    文件/root/a.txt如果有写权限,则输出yes,否则,输出no。

      3. 两个文件之间进行比较

      判断选项作用
      文件1 -nt 文件2判断文件1的修改时间是否比文件2的新(新则为真)。
      文件1 -ot 文件2判断文件1的修改时间是否比文件2的旧(旧则为真)。
      文件1 -ef 文件2判断文件1是否和文件2的inode号一致,可以理解为两个文件是否为同一文件。这个判断是用于判断硬链接很好的方法 。

      示例:

      ln /root/a.txt /root/an.txt     
      为a.txt文件创建一个硬链接an.txt文件。
      某个文件的硬链接的inode号和该文件自身的inode号一致。
      

      ll -i /root/an.txt
      查看an.txt文件的inode节点号。

      [ /root/a.txt -ef /root/an.txt ] && echo yes || echo no

        4. 两个整数之间的比较

        判断选项作用
        整数1 -eq 整数2判断整数1是否等于整数2。
        整数1 -ne 整数2判断整数1是否不等于整数2。
        整数1 -gt 整数2判断整数1是否大于整数2。
        整数1 -lt 整数2判断整数1是否小于整数2。
        整数1 -ge 整数2判断整数1是否大于等于整数2。
        整数1 -le 整数2判断整数1是否小于等于整数2。

        示例:

        [ 63 -ge 45 ] && echo yes || echo no
        • 1

        5. 字符串的判断

        判断选项作用
        -z 字符串判断字符串是否为空。
        -n 字符串判断字符串是否为非空。
        字符串1 == 字符串2判断字符串1是否等于字符串2。也可用单个=进行判断。(推荐用==)
        字符串1 != 字符串2判断字符串1是否不等于字符串2。

        说明: 可用 [ -z $变量名 ] 来判断变量的值是否为空。

        示例:

        name=admin
        [ -z $name ] && echo yes || echo no        
        # 输出no
        

        [ "$name" == admin ] && echo yes || echo no
        # 输出yes

          6. 多重条件判断

          判断选项作用
          判断1 -a 判断2逻辑与。判断1和判断2都为真,最终的结果才为真。
          判断1 -o 判断2逻辑或。判断1和判断2有一个为真,最终的结果就为真。
          ! 判断逻辑非。将原始的判断结果取反。

          示例:

          age=100
          [ -n $age -a $age -gt 89 ] && echo yes || echo no
          # 输出yes
          

          [ ! -n $age ] && echo yes || echo no
          # 输出no





            标签:文件,shell,是否,编程,整数,echo,转帖,判断,yes
            From: https://www.cnblogs.com/jinanxiaolaohu/p/16943552.html

            相关文章

            • [转帖]JVM 内存分析工具 MAT 的深度讲解与实践——入门篇
              https://juejin.cn/post/6908665391136899079  注:本文原创,转发需全文转载并标明原文链接。JVM内存分析往往由团队较资深的同学来做,本系列通过3篇文章,深度解析并帮助读者全面深度掌握MAT的使用方法。即使没有JVM内存分析的实践经验,也能快速成为内存分析高手!本系......
            • Linux C编程一站式学习 part3: Linux系统编程
              LinuxC编程一站式学习(akaedu.github.io)28.文件与I/O29.文件系统30.进程31.Shell脚本32.正则表达式33.信号34.终端、作业控制与守护进程35.线程36.TCP/IP协议基础37.socket编程......
            • EF Core异步编程
              异步编程本文内容异步LINQ运算符客户端异步LINQ运算符当在数据库中执行查询时,异步操作可避免阻止线程。对于在富客户端应用程序中保持响应式UI,异步操作很重要,还可以增加Web应用程序中的吞吐量,从而释放线程来为Web应用程序中的其他请求提供服务。按照.NET标准,EFCore......
            • 小美走公路(美团2024届秋招笔试第一场编程真题)
              题面核心思想正走一遍,反走一遍。代码importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){finallongMOD=(long)(1e9+7);Scannerscanner=newScanner(System.in);intn=scanner.nextInt();......
            • 小美的排列构造(美团2024届秋招笔试第一场编程真题)
              题面核心思想贪心最大最小次大次小·····这样就行了。代码importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){finallongMOD=(long)(1e9+7);Scannerscanner=newScanner(System.in);int......
            • 小美的排列询问(美团2024届秋招笔试第一场编程真题)
              题面核心思想模拟需要注意的是1~n只会出现一次所有nums[i]如果等于x(或y),下一位等不等于y(或x),就可以直接判断出结果了。代码importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){finallongMOD=(long)(1e9+7);......
            • Cush:从辞职自学编程到被 Apple、PriceTag推荐
              名字:Cush开发者/团队:ShaSha平台:iOS、macOS请简要介绍下这款产品也许你听过记账可以帮助省钱,但总是浅尝辄止?快试试Cush!它精简了记账中所有复杂繁琐的步骤,简单精美,让你轻松养成记账习惯!与此同时,在你超支时,Cush还会醒目地提醒你,让你每一天、每一笔都能省钱!这个月末不再超......
            • 什么是反应式编程?
              反应式编程是一种基于异步数据流和基于事件的实时处理的编程范式。这意味着操作并不会等待彼此同步完成。它支持非阻塞操作,并允许通过观察事件实时异步执行其他操作。反应式编程通过在运行时监控其他进程的执行情况来实现现实事件和异步执行。现如今许多应用程序都需要能处理大量......
            • 首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
              CodeGeeX是一款免费的智能编程助手。继CodeGeeX在VisualStudioCode、JetBrainsIDEs全家桶、HBuilderX、deepin-IDE等主流IDE中上线后,用户呼声最高的VisualStudio平台的适配插件产品也正式推出上线了!成为首个适配VisualStudio平台的国产智能编程助手。目前CodeGeeXv1.0.0适......
            • 在 PowerShell 中,您可以使用以下命令来管理 DNS 相关的任务以及 DNS 缓存
              在PowerShell中,您可以使用以下命令来管理DNS相关的任务以及DNS缓存:获取当前计算机的DNS客户端配置信息powershellCopyCodeGet-DnsClientGet-DnsClientInterfaceAlias       InterfaceConnectionSpecificSuffixConnectionSpecificSuffixRegi......