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

Shell脚本6 -- 条件判断if

声明:
本文的学习内容来源于B站up主“泷羽sec”视频【shell编程(4)脚本与用户交互以及if条件判断】的公开分享,所有内容仅限于网络安全技术的交流学习,不涉及任何侵犯版权或其他侵权意图。如有任何侵权问题,请联系本人,我将立即删除相关内容。
本文旨在帮助网络安全爱好者提升自身安全技能,并严格遵守国家法律法规。任何人利用本文中的信息从事违法活动,均与本文作者和“泷羽sec”无关。请读者自觉遵纪守法,合理合法使用相关知识。


在 Shell 脚本中,if 语句是实现条件判断和分支逻辑的核心语法。通过使用 if,我们可以根据条件执行不同的操作,使脚本更加灵活和强大。本文将介绍 if 语句的基本语法、常见使用场景及注意事项。


1 基本语法

Shell 中的 if 语句的基本结构如下:

if 条件; then命令1命令2
fi

常见的扩展形式包括:

  1. if-else 语句:
if 条件; then命令1
else命令2
fi
  1. if-elif-else 语句:
if 条件1; then命令1
elif 条件2; then命令2
else命令3
fi

2 条件判断方式

if 中,条件判断主要依赖 test[] 命令。以下是常见的条件表达式:

2.1 文件条件

  • -e file:文件存在。
  • -d file:文件是目录。
  • -f file:文件是普通文件。
  • -s file:文件大小非零。

示例:

if [ -e "/etc/passwd" ]; thenecho "文件存在"
fi

Pasted image 20241118203753

2.2 字符串条件

  • [ "$a" = "$b" ]:判断字符串是否相等。
  • [ -z "$a" ]:判断字符串是否为空。

示例:

if [ "$USER" = "root" ]; thenecho "当前用户是 root"
fi

Pasted image 20241118203919

2.3 数值条件

  • -eq:等于。
  • -ne:不等于。
  • -gt:大于。
  • -lt:小于。

示例:

if [ "$1" -gt 10 ]; thenecho "参数大于 10"
fi

Pasted image 20241118203954

2.4 逻辑运算符

  • [ 条件1 -a 条件2 ] 或者 [ 条件1 ] && [ 条件2 ]:逻辑与。

  • [ 条件1 -o 条件2 ] 或者 [ 条件1 ] || [ 条件2 ]:逻辑或。

  • ! 条件:逻辑非。

    示例:

if [ -z "$1" ] || [ -z "$2" ]; thenecho "请提供两个参数"exit 1
fiif [ "$1" -lt 10 -a "$2" -lt 10 ]; thenecho "参数1和参数2都小于10"
fi

Pasted image 20241118204528


3 示例

3.2 示例 1:检查文件类型

#!/bin/bash
file="/etc/passwd"if [ -f "$file" ]; thenecho "$file 是一个普通文件"
elif [ -d "$file" ]; thenecho "$file 是一个目录"
elseecho "$file 不存在或类型未知"
fi

Pasted image 20241118204631

3.2 示例 2:判断用户输入

#!/bin/bash
read -p "请输入一个数字:" numberif [ "$number" -gt 0 ]; thenecho "这是一个正数"
elif [ "$number" -lt 0 ]; thenecho "这是一个负数"
elseecho "这是零"
fi

Pasted image 20241118204715

3.2 示例 3:综合逻辑判断

#!/bin/bash
if [ $# -eq 2 ]; thenecho "参数数量正确"if [ "$1" = "$2" ]; thenecho "两个参数相等"elseecho "两个参数不相等"fi
elseecho "请输入两个参数"
fi

Pasted image 20241118204802


4 注意事项

  1. 条件语句的书写:

    • 条件表达式中的变量应加引号,防止因空值导致语法错误。
    • [ 条件 ] 和条件内容之间需要有空格,否则会报错。
  2. 使用 test 命令:

    • test 命令和 [] 等价,可以直接使用,如:
      if test -e "/etc/passwd"; thenecho "文件存在"
      fi
      
  3. Shell 的兼容性问题:

    • bashsh 中,if 的语法一致,但某些高级功能可能在不同版本中表现不同。

相关文章:

Shell脚本6 -- 条件判断if

声明: 本文的学习内容来源于B站up主“泷羽sec”视频【shell编程(4)脚本与用户交互以及if条件判断】的公开分享,所有内容仅限于网络安全技术的交流学习,不涉及任何侵犯版权或其他侵权意图。如有任何侵权问题&#xff0c…...

经验笔记:从生成 SSH 密钥到成功连接测试(以Gitee为例)

从生成 SSH 密钥到成功连接测试的经验笔记(以Gitee为例) 1. 生成 SSH 密钥对 选择合适的加密算法 ED25519: 密钥长度:私钥 256 位(32 字节),公钥 256 位(32 字节)&#…...

Object.defineProperty和响应式

Object.defineProperty()是一个监听对象属性变化的方法。一般情况下我们是不会直接使用的,或者说我们遇到的场景还没有这么高级。 最有名的例子就是Vue2的响应式实现,就是通过这个方法来实现的。 用起来不难,就是个API,只是用的…...

前端web

题目&#xff1a;制作带有下拉悬停菜单的导航栏 效果图 一、先制作菜单栏 <body> <div id"menu"> <div id"container"> <div class"item">游戏1 <div cla…...

DDNet 服务器配置教程 Linux 环境

DDNet 服务器配置教程 Linux 环境 配置之前可以参考一下官方网址给出的内容 官方网址&#xff1a;DDNet官方 环境说明 OS: Debian 11 安装 可以直接从官网下载&#xff0c;也可以使用这个链接: Linux_DDNet 下载链接 上文中给的链接会因为更新而出现版本落后的情况&#x…...

Vue 2 —监视器实现动态切换表单属性值

目录 一、需求背景 二、监视器语法 三、实例展示 1、HTML部分 2、JS部分 四、使用场景总结 1. 表单验证 2. 动态更新 UI 3. 数据同步 4. 计算属性的替代方案 计算属性的优势 : 简洁性&#xff1a; 监视器的优势 : 灵活性&#xff1a; 多属性依赖&#xff1a; 副…...

Qt_day10_程序打包(完结)

目录 1. 设置图标 2. Debug和Release版本 3. 动态链接库 4. 打包 5. 联系项目要求 Qt开发的程序最终都是要给用户使用的&#xff0c;用户的电脑上不可能装一个Qt的开发环境导入项目使用。因此项目项目开发完成后需要打包——制作成安装包&#xff0c;用户直接下载并安装即可使用…...

golang通用后台管理系统09(系统操作日志记录)

1.日志工具类 package log/**** 日志记录 wangwei 2024-11-18 15:30*/ import ("log""os""path/filepath""time" )// 获取以当前日期命名的日志文件路径 func getLogFilePath() string {currentDate : time.Now().Format("2006-…...

如何确保爬取的数据准确性和完整性?

在数据驱动的业务环境中&#xff0c;爬虫程序的准确性和完整性至关重要。本文将探讨如何使用Java编写爬虫程序&#xff0c;并确保其在爬取数据时的准确性和完整性。 1. 精确的HTML解析 确保数据准确性的第一步是精确地解析HTML。Jsoup是Java中常用的HTML解析库&#xff0c;它提…...

【java】JDK安装

Java Downloads | Oracle 中国 next 注意安装的路径 环境变量...

科技改变工作方式:群晖NAS安装内网穿透实现个性化办公office文档分享(1)

文章目录 前言1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 前言 本文将详细介绍如何在群晖NAS上安装Synology Office和Synology Drive Server&#xff0c;并利用Cpolar内网穿透工具为本地文档配置固定的公网…...

基于Java Springboot甘肃旅游管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…...

03-axios常用的请求方法、axios错误处理

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…...

《天体》游戏配置要求介绍

《天体》是一款太空探索和基地建造生存游戏&#xff0c;而游戏的画面表现非常不错&#xff0c;需要的配置要求也不算高&#xff0c;CPU最低只需要英特尔的酷睿i3 4XXX 系列或者AMD的Ryzen 3 2.6ghz处理器。 天体要什么配置最低配置: 需要 64 位处理器和操作系统 操作系统 *: …...

【企业级分布式系统】 Kafka集群

文章目录 KafkaKafka 概述使用消息队列的好处 Kafka 的特性Kafka 系统架构Kafka 的应用场景Kafka 的优缺点 Kafka 集群部署下载安装包安装 KafkaKafka 命令行操作Kafka 架构深入 FilebeatKafkaELK 部署指南~部署 ZookeeperKafka 集群部署 Filebeat部署 ELK&#xff08;Logstash…...

MySQL 中有哪几种锁?

在 MySQL 中&#xff0c;锁&#xff08;Locks&#xff09;是为了保证数据的一致性和完整性而设计的机制。常见的锁可以从粒度和操作类型两个角度分类。以下是详细介绍&#xff1a; 按 粒度 分类 1. 全局锁 描述&#xff1a;锁定整个数据库实例。用途&#xff1a;主要用于备份…...

kafka中节点如何服役和退役

节点服役&#xff08;添加新节点&#xff09; 1.准备新节点&#xff1a; 安装 Kafka 和相关依赖。 配置 Kafka Broker 的 server.properties 文件&#xff0c;确保 broker.id 是唯一的&#xff0c;并且配置正确的 zookeeper.connect 地址。 重启网卡 2.启动新节点&#xff…...

HTML5实现剪刀石头布小游戏(附源码)

文章目录 1.设计来源1.1 主界面1.2 皮肤风格1.2 游戏中界面 2.效果和源码源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/143798520 HTM…...

集群聊天服务器(3)muduo网络库

目录 基于muduo的客户端服务器编程 muduo只能装在linux中&#xff0c;依赖boost库 客户端并不需要高并发 基于muduo的客户端服务器编程 支持epoll线程池&#xff0c;muduo封装了线程池 而且还有完善的日志系统 使用muduo库代码非常固定&#xff0c;基本就只有chatserver的类名…...

解决在Ubuntu 20.04中使用PyCharm时无法输入中文的问题

解决在Ubuntu 20.04中使用PyCharm时无法输入中文的问题 要解决在Ubuntu 20.04中使用PyCharm时无法输入中文的问题&#xff0c;特别是当使用IBus作为输入法框架时&#xff0c;我们需要通过设置适当的环境变量来确保PyCharm可以正确调用IBus输入法。下面将详细说明原因及解决步骤…...

JMS, ActiveMQ 学习一则偌

开发个什么Skill呢&#xff1f; 通过 Skill&#xff0c;我们可以将某些能力进行模块化封装&#xff0c;从而实现特定的工作流编排、专家领域知识沉淀以及各类工具的集成。 这里我打算来一次“套娃式”的实践&#xff1a;创建一个用于自动生成 Skill 的 Skill&#xff0c;一是用…...

PHP Swoole 进阶必学核心(EventLoop深度解剖+内存泄漏避坑手册)

第一章&#xff1a;PHP Swoole 进阶必学核心&#xff08;EventLoop深度解剖内存泄漏避坑手册&#xff09;Swoole 的 EventLoop 是其高性能异步 I/O 的心脏&#xff0c;本质是单线程 Reactor 模式驱动的事件循环&#xff0c;底层基于 epoll/kqueue/iocp 封装。它并非简单轮询&am…...

Spring IOC 源码学习 事务相关的 BeanDefinition 解析过程 (XML)比

从0构建WAV文件&#xff1a;读懂计算机文件的本质 虽然接触计算机有一段时间了&#xff0c;但是我的视野一直局限于一个较小的范围之内&#xff0c;往往只能看到于算法竞赛相关的内容&#xff0c;计算机各种文件在我看来十分复杂&#xff0c;认为构建他们并能达到目的是一件困难…...

Maomi.In | .NET 全能多语言解决方案鞍

AI Agent 时代的沙箱需求 从 Copilot 到 Agent&#xff1a;执行能力的质变 在生成式 AI 的早期阶段&#xff0c;应用主要以“Copilot”形式存在&#xff0c;AI 仅作为辅助生成建议。然而&#xff0c;随着 AutoGPT、BabyAGI 以及 OpenAI Code Interpreter&#xff08;现为 Advan…...

嵌入式进阶——MCU启动与代码执行教程

MCU启动与代码执行教程 1. 简介 本教程旨在帮助理解&#xff0c;深入剖析ARM Cortex-M系列单片机上电后的完整启动流程&#xff0c;以及程序在Flash、RAM、寄存器三者的协同执行机制。基于STM32等典型MCU&#xff0c;从硬件复位瞬间开始&#xff0c;逐步讲解向量表加载、Reset_…...

G-Helper:华硕笔记本的轻量级控制中心,5分钟告别臃肿官方软件

G-Helper&#xff1a;华硕笔记本的轻量级控制中心&#xff0c;5分钟告别臃肿官方软件 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Fl…...

Ryujinx开源Switch模拟器:跨平台游戏体验的技术实现与优化指南

Ryujinx开源Switch模拟器&#xff1a;跨平台游戏体验的技术实现与优化指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 在游戏硬件快速迭代的今天&#xff0c;玩家们常常面临一个困…...

AI赋能生物制药设备管理:智能运维筑牢质量合规核心防线

“生物反应器突发故障&#xff0c;批次发酵液报废损失超百万”“洁净区设备定期维护耗时数天&#xff0c;产线停摆影响产能”“无菌生产设备隐性隐患漏判&#xff0c;导致产品质量不达标面临召回”…… 生物制药行业作为高合规、高精准、高投入的特殊制造领域&#xff0c;设备是…...

SDMatte与数据库联动:开发一个带历史记录管理的在线抠图平台

SDMatte与数据库联动&#xff1a;开发一个带历史记录管理的在线抠图平台 1. 项目背景与价值 想象一下这样的场景&#xff1a;设计师小王每天需要处理上百张商品图片的抠图工作。传统方法要么手动操作费时费力&#xff0c;要么使用本地软件来回切换效率低下。如果能有一个在线…...

跨境电商最最常用的接口列表与接入

跨境电商最核心、最常用的接口集中在 商品、订单、库存、物流、支付、店铺 / 授权 六大类。下面按 全球主流平台&#xff08;亚马逊、Shopify、速卖通、Shopee、eBay&#xff09; 给出 常用接口清单 标准接入流程 关键技术点。一、跨境电商最常用接口分类&#xff08;通用&am…...