Shell脚本6 -- 条件判断if

server/2024/11/23 2:11:29/

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


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


1 基本语法

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

bash">if 条件; then命令1命令2
fi

常见的扩展形式包括:

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

2 条件判断方式

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

2.1 文件条件

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

示例:

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

Pasted image 20241118203753

2.2 字符串条件

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

示例:

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

Pasted image 20241118203919

2.3 数值条件

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

示例:

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

Pasted image 20241118203954

2.4 逻辑运算符

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

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

  • ! 条件:逻辑非。

    示例:

bash">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:检查文件类型

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

Pasted image 20241118204631

3.2 示例 2:判断用户输入

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

Pasted image 20241118204715

3.2 示例 3:综合逻辑判断

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

Pasted image 20241118204802


4 注意事项

  1. 条件语句的书写:

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

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

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

http://www.ppmy.cn/server/144152.html

相关文章

视频流媒体播放器EasyPlayer.js H.265流媒体播放器当container窗口发生变化的时候,播放器如何自适应

流媒体播放器的核心技术及发展趋势展现了其在未来数字生活中的无限潜力。现今流媒体播放器将继续引领数字娱乐的新潮流,为用户提供更加丰富多样的内容体验。 流媒体播放器负责解码和呈现内容,常见的播放器包括VLC和HTML5播放器等。流媒体技术的应用场景广…

路由器如何调优?

路由器调优可以显著改善网络性能、提高信号覆盖范围、减少延迟并增强安全性。根据不同的使用场景和需求,以下是一些常见的调优方法: 1. 选择合适的无线频段 2.4 GHz频段:适合较远距离的连接,但容易受到干扰(如微波炉…

【Git】工作区、暂存区和版本库

目录 一、基本概念: 关系图: 1. 工作区(Working Directory) $ 1.1 工作区功能 $ 1.2 工作区特点 2. 暂存区(Staging Area) $ 2.1 暂存区功能 $ 2.2 暂存区特点 $ 2.3 常用命令 3. 版本库&#xff08…

国产系统(麒麟V10、uos)使用pageoffice在线编辑office文件

本文描述了PageOffice产品在&#xff08;VUESpringboot&#xff09;前后端分离的项目中如何集成调用。 一、环境 前端&#xff1a;vue2 后端&#xff1a;springboot2、jdk1.8 如果是springboot3&#xff0c;jdk17及以上版本&#xff0c;用这个依赖&#xff1a; <dependen…

网络安全中常用浏览器插件、拓展

引言 现在的火狐、Edge&#xff08; Chromium内核&#xff09;、Chrome等浏览器带有插件、拓展&#xff08;Plugin&#xff09;的功能。这些插件中有的可以过滤广告&#xff0c;有的提供便捷的翻译&#xff0c;有的提供JavaScript脚本支持&#xff0c;方便用户的使用也大大的增…

蓝桥杯每日真题 - 第16天

题目&#xff1a;&#xff08;卡牌&#xff09; 题目描述&#xff08;13届 C&C B组C题&#xff09; 解题思路&#xff1a; 题目分析&#xff1a; 有 n 种卡牌&#xff0c;每种卡牌的现有数量为 a[i]&#xff0c;所需的最大数量为 b[i]&#xff0c;还有 m 张空白卡牌。 每…

WebSocket详解、WebSocket入门案例

目录 1.1 WebSocket介绍 http协议&#xff1a; webSocket协议&#xff1a; 1.2WebSocket协议&#xff1a; 1.3客户端&#xff08;浏览器&#xff09;实现 1.3.2 WebSocket对象的相关事宜&#xff1a; 1.3.3 WebSOcket方法 1.4 服务端实现 服务端如何接收客户端发送的请…

【NodeJS】Node.js是什么?能做什么?

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区:个人社区 💞 个人主页:个人主页 🙉 专栏地址: ✅ Java 中级 🙉八股文专题:剑指大厂,手撕 J…