shell脚本的条件测试

article/2025/7/2 6:25:41

命令结果判定

&& :在命令执行后如果没有任何报错时会执行符号后面的动作

|| :在命令执行后如果命令有报错会执行符号后的动作

条件判断

# test 语句

# [],[[]],(())  语句

# [[]] 可以支持的表达式更多,是最常用的语句

判断表达式

文件判断

        -a / -e 文件     ##检测文件是否存在

        -b 文件        ##检测文件是否存在且为块设备文件,存在则结果为0  

        -c 文件        ##检测文件是否存在且为字符设备文件,存在则结果为0      

        -L 文件         ##存在且为链接文件为真         

        -d 文件       ##文件存在且为目录为真       

         -f 文件      ##文件存在且为普通文件为真     

        -S 文件      ##文件存在存在且大小>0为真          

        -u 文件      ##文件是否设置了SUID权限位,设置了SUID则结果为0           
        -r 文件      ##文件存在且可读为真            
        -w 文件      ##文件存在且可写为真            
        -x 文件      ##文件存在且可执行为真            

        f1 -nt f2  -nt为newer than     ##文件f1比f2新为真       

        f1 -ot f2  -ot为older than    ##文件f1比f2旧为真

        f1 -ef f2  -ef为等于           ##文件是否在相同的设备有相同的节点号          

# cd /mnt/

        -a 判断文件是否存在

        -d 判断文件类型

        -S 判断文件是否存在,且不为空

        -x 判断文件权限,是否可以执行

        -ot 判断文件新旧

# [ "lee" -ot "lee1" ] && echo yes || echo no

        -ef 判断节点号是否相同

节点号不同运行结果:

# rm -fr test

# ln lee test                  【创建硬链接】

# ls -i lee test 查看节点号

# [ "/mnt/lee" -ef "/mnt/test" ] && echo yes || echo no

字符串测试表达式

检测变量是否为空

# a=lee

比较字符

# b=test

整数测试表达式

判断相等

# a=1 ; b=1

对比大小

逻辑操作符

练习:判断输入字符,输入空报错,输入exit退出,判断是否为文件或目录

# vim file.sh        【配置文件】

#!/bin/bash

ACTIO()

{

read -p "输入字符: " target

#退出

    [ "$target" = "exit" ] && {

    echo bye

    exit 0

    }

# 1. 检测变量是否为空

    [ -z "$target" ] && {

    echo "错误:变量不能为空"

    target

    }

# 2. 检测文件/目录是否存在

    [  -e "$target" ] || {

    echo "错误,目录不存在"

    target

    }

# 3. 判定是否是文件

    [ -f "$target" ] && {

    echo "是个文件"

    target

    }

# 4. 判定是否是目录

    [ -d "$target" ] && {

    echo "是一个目录"

    target

    }

}

ACTIO       【最后要运行函数】

# bash file.sh                 【sh不能运行时,bash可以运行脚本】

练习:猜数字判定

#!/bin/bash

NUM()

{   NUM=$[RANDOM%10]  }          【设置随机数0~9】

GAUSE()

{

    read -p "输入数字0~9:" sum

# 1检测变量是否为空

    [ -z "$sum" ] && {                 【判断输入是否为空】

    echo "错误:输入不能为空"

    GAUSE

    }

#2,检测输入

    (( $sum > 10 || $sum < 0 )) && {           【判断输入是否在范围内】

        echo "必须是0~9:"

        echo $NUM

        GAUSE

    }

#3,循环运行

    [ "$sum" -eq "$NUM" ] && {           【判断是否猜对,没猜对会退出】

        echo "猜对了"

        read -p "是否继续:(y/n)" AAA

        [ "$AAA" = "y" ] && {

            NUM

            GAUSE

        }||{

            echo bye

            exit

        }

    }

}

NUM

GAUSE


http://www.hkcw.cn/article/jWqPAEskfn.shtml

相关文章

已有的前端项目打包到tauri运行(windows)

1.打包前端项目产生静态html、css、js 我们接下来用vue3 vite编写一个番茄钟案例来演示。 我们执行npm run build 命令产生的dist目录下的静态文件。 2.创建tarui项目 npm create tauri-applatest一路回车&#xff0c;直到出现。 3.启动运行 我们将打包产生的dist目录下的…

随记 nacos + openfegin 的远程调用找不到服务

这里的配置问题就不说了&#xff0c;基本的都没有问题&#xff0c;然后现在的是怎么样的场景呢&#xff0c;就是有两台服务器&#xff0c;两台服务器分别部署了两个模块&#xff0c;B要调用A服务&#xff0c;然后通过nacos找到了这个服务的名称&#xff0c;但是呢发现连不上&am…

【Python 算法零基础 4.排序 ⑦ 桶排序】

草木不争高&#xff0c;争的是生生不息 —— 25.5.26 选择排序回顾 ① 遍历数组&#xff1a;从索引 0 到 n-1&#xff08;n 为数组长度&#xff09;。 ② 每轮确定最小值&#xff1a;假设当前索引 i 为最小值索引 min_index。从 i1 到 n-1 遍历&#xff0c;若找到更小元素&am…

天机学堂-分页查询

需求 分页查询我的课表 返回&#xff1a; 总条数、总页数、当前页的课表信息的集合 返回的VO&#xff08;已经封装成统一的LearningLessonsVO&#xff09; 定义Controller RestController RequestMapping("/lessons") RequiredArgsConstructor public class Lear…

Transformer 是未来的技术吗?

之前的文章中&#xff0c;聊了不少关于 Transformer 方面的内容&#xff1a; Transformer 中的注意力机制很优秀吗&#xff1f;-CSDN博客初探 Transformer-CSDN博客来聊聊Q、K、V的计算-CSDN博客 现在的大模型基本都是基于 Transformer 或者它的演进技术&#xff0c;那么&…

阿里云国际站,如何通过代理商邀请的链接注册账号

阿里云国际站&#xff1a;如何通过代理商邀请链接注册&#xff0c;解锁“云端超能力”与专属福利&#xff1f; 渴望在全球化浪潮中抢占先机&#xff1f;想获得阿里云国际站的海量云资源、遍布全球的加速节点与前沿AI服务&#xff0c;同时又能享受专属折扣、VIP级增值服务支持或…

[创业之路-404]:企业战略管理案例分析-战略执行-人才战略

一、概述 在BLM&#xff08;业务领先模型&#xff09;战略执行中&#xff0c;人才是核心模块和关键要素&#xff0c;其管理需紧密围绕战略目标展开&#xff0c;具体如下&#xff1a; 1. 人才战略与战略目标的对齐 关键任务分解&#xff1a;通过战略解码&#xff0c;将业务目…

C++11 : 智能指针

C11 &#xff1a; 智能指针 目录 C11 &#xff1a; 智能指针引言1. 智能指针的使用场景分析2. RALL和智能指针的设计思路3. C标准库智能指针的使用4. 智能指针的原理5. shared_ptr和weak_ptr5.1 shared_ptr循环引用问题5.2 weak_ptr 6. shared_ptr的线程安全问题7. C11和boost中…

嵌入式开发之STM32学习笔记day16

STM32F103C8T6 I2C通信协议 1 I2C简介 I2C&#xff08;Inter-Integrated Circuit&#xff09;是一种两线制的串行通信协议&#xff0c;广泛应用于微控制器与外围设备之间的数据传输&#xff0c;它支持多主多从的通信模式&#xff0c;允许多个设备连接在同一总线上&#xff0c;…

Redis数据类型操作命令

Redis通用命令 keys&#xff1a;查看符合模板的所有key 因为keys命令使用的是模糊查序&#xff0c;比较耗性能&#xff0c;由于有redis是单线程&#xff0c;因此在生成情况下不建议使用该命令。del&#xff1a;删除一个或者多个keyexists&#xff1a;判断一个key是否存在expi…

Leetcode 2123. 使矩阵中的 1 互不相邻的最小操作数

1.题目基本信息 1.1.题目描述 给你一个 下标从 0 开始 的矩阵 grid。每次操作&#xff0c;你可以把 grid 中的 一个 1 变成 0 。 如果一个矩阵中&#xff0c;没有 1 与其它的 1 四连通&#xff08;也就是说所有 1 在上下左右四个方向上不能与其他 1 相邻&#xff09;&#x…

STL解析——list的使用

目录 1.简介 2.构造函数 3.迭代器 3.1封装 3.2迭代器分类 4.排序性能 4.1链式与数组 4.2缓存读取 1.简介 STL容器中提供的list容器也是一种顺序容器&#xff0c;底层实现方式是带头双向链表&#xff0c;这种实现方式能比单链表更高效的访问数据。 下面围绕部分重要接口…

数据库系统概论(十一)SQL 集合查询 超详细讲解(附带例题表格对比带你一步步掌握)

数据库系统概论&#xff08;十一&#xff09;SQL 集合查询 超详细讲解&#xff08;附带例题表格对比带你一步步掌握&#xff09; 前言一、什么是集合查询&#xff1f;二、集合操作的三种类型1. 并操作2. 交操作3. 差操作 三、使用集合查询的前提条件四、常见问题与注意事项五、…

数学建模期末速成 最短路径

关键词&#xff1a;Dijkstra算法 Floyd算法 例题 已知有6个村庄&#xff0c;各村的小学生人数如表所列&#xff0c;各村庄间的距离如图所示。现在计划建造一所医院和一所小学&#xff0c;问医院应建在哪个村庄才能使最远村庄的人到医院看病所走的路最短&#xff1f;又问小学建…

MonitorSDK_监测用户行为(点击、页面路由变化、页面浏览量变化)

点击事件监测 为了实现用户点击事件的监控和数据埋点&#xff0c;可以通过监听全局的 mousedown 和 touchstart 事件&#xff0c;收集用户交互数据&#xff0c;并将其上报到服务器。 export default function onClick(){[mousedown, touchstart].forEach( eventType > { …

NE555输出PWM驱动NMOS控制灯光电路Multisim仿真

仿真电路&#xff1a; 遇到的一些问题&#xff1a; 1、NE555怎么产生PWM波形&#xff1f; 解&#xff1a; 555定时器频率计算器_555定时器频率在线计算_电路参数计算 - 电子发烧友(www.elecfans.com) 这个在线工具可以通过设定频率、占空比、电阻&#xff0c;从而求出电阻值…

ThinkPrune:在RL中引入长度限制,在保持性能一致或略有提升下,显著提升推理效率

摘要&#xff1a;我们提出了THINKPRUNE&#xff0c;这是一种简单而有效的方法&#xff0c;用于缩短长思考型大语言模型&#xff08;LLMs&#xff09;的思考长度。这些模型被发现常常会产生低效且冗余的思考过程。现有的关于减少思考长度的初步探索主要集中在迫使思考过程提前结…

重温经典算法——堆排序

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 基本原理 堆排序是一种基于二叉堆的排序算法&#xff0c;时间复杂度为O(n log n)。堆排序核心步骤包括构建最大堆和反复取出堆顶元素排序&#xff1a;首先从最后一个非叶子…

PyTorch——卷积层(3)

conv_arithmetic/README.md at master vdumoulin/conv_arithmetic GitHub out_channel1 out_channel2

5.29 自学测试 Linux基础 Day4

一、Linux操作系统介绍 1.操作系统介绍&#xff1a; 管理计算机硬件与软件资源的计算机程序&#xff0c;同时也是计算机系统的内核与基石。 2.常见的操作系统 桌面操作系统&#xff1a;Windows系列、Linux、MacOS 嵌入式操作系统&#xff1a;Linux 服务器操作系统&#x…