Linux_shell脚本if语句详细教程

news2024/11/20 4:48:14

前言

在 Linux Shell 脚本中,if 语句用于基于条件执行命令或代码块。它的基本语法结构如下:

if 条件; then
    # 如果条件为真时执行的代码
elif 另一个条件; then
    # 如果另一个条件为真时执行的代码
else
    # 如果所有条件都不成立时执行的代码
fi

一、if 语句中 &&、|| 和 ! 的使用方法

1、&& (逻辑与)

  • && 用于连接两个命令,当左边的命令成功(即返回值为0)时,右边的命令才会执行。
# 语法结构:
if 条件一 && 条件二; then
    echo "条件一和条件二都执行成功"
else
    echo "条件一或条件二有失败"
fi

逻辑:

  • 如果 条件一 成功(返回值为 0)且 条件二 也成功(返回值为 0),then 分支会执行。
  • 如果 条件一 失败(返回非 0),或者 条件二 失败(返回非 0),else 分支会执行。

这个规则是基于“与”运算符:只有两个条件都成功,then 才会执行。

# 场景示例:检查一个文件是否存在且可执行
#!/bin/bash

FILE="/home/user/file.sh"

# [ ] 写法
if [ -e "$FILE" ] && [ -x "$FILE" ]; then
    echo "[: 文件存在且可执行"
else
    echo "[: 文件不存在或不可执行"
fi

# [[ ]] 写法 
if [[ -e "$FILE" && -x "$FILE" ]]; then
    echo "[[: 文件存在且可执行"
else
    echo "[[: 文件不存在或不可执行"
fi

2、|| (逻辑或)

  • || 用于连接两个命令,当左边的命令失败(即返回值不为0)时,右边的命令才会执行
# 语法结构:
if 条件一 || 条件二; then
    echo "条件一或条件二执行成功"
else
    echo "条件一和条件二都执行失败"
fi

逻辑:

  • 如果 条件一 成功(返回值为 0),then 分支会执行。
  • 如果 条件一 失败(返回非 0),则会检查 条件二:
      如果 条件二 成功(返回值为 0),then 分支也会执行。
      如果 条件一 和 条件二 都失败(返回非 0),则会执行 else 分支。

这个规则是基于“或”运算符:只要有一个条件成功,then 就会执行。

# 场景示例:检查目录是否存在,如果不存在则创建
#!/bin/bash

DIR="/home/user/mydir"

if [[ -d "$DIR" ]] || mkdir "$DIR" > /dev/null 2>&1; then
    echo "目录已存在或已成功创建"
else
    echo "创建目录失败"
fi

3、! (逻辑非)

  • ! 用于对一个条件进行取反。如果条件为真,! 会使其为假,反之亦然。
# 语法结构:
if ! 条件一; then
    echo "条件一假,取反真"
else
    echo "条件一真,取反假"
fi

在这里插入图片描述

# 示例
#!/bin/bash

if [ ! -f "file.txt" ]; then
  echo "文件不存在"
else
  echo "文件存在"
fi

在这里插入图片描述

#!/bin/bash

# ! 与 && 配合使用
if [ ! -f "file.txt" ] && echo "假如条件二成功"; then
  echo "条件一(文件不存在,取反真)和条件二都执行成功"
else
  echo "条件一(文件存在,取反假)或条件二有失败"
fi

二、检查文件和文件夹方法

1、判断文件是否存在 -f

#!/bin/bash

# 获取当前脚本文件所在的目录
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)

# 设置要检查的文件名
file="${SCRIPT_DIR}/example.txt"
echo ${file}

# 判断文件是否存在
if [ -f "$file" ]; then
    echo "$file 文件存在"
else
    echo "$file 文件不存在"
fi

2、判断文件夹(目录)是否存在 -d

# 设置要检查的目录名
dir="/home/user/myfolder"

# 判断目录是否存在
if [ -d "$dir" ]; then
    echo "$dir 目录存在"
else
    echo "$dir 目录不存在"
fi
其它参数说明
-e检查文件或目录是否存在(不管是文件还是目录)
-r检查文件是否可读(非root权限下才能获取正确)
-w检查文件是否可写(非root权限下才能获取正确)
-x检查文件是否可执行(非root权限下才能获取正确)

三、字符串比较、数值比较及算术比较

1.整数数值对比

数值比较参数说明
-lt表示 “less than”(小于)
-eq表示 “equal to”(等于)
-ne表示 “not equal to”(不等于)
-gt表示 “greater than”(大于)
-ge表示 “greater than or equal to”(大于或等于)
-le表示 “less than or equal to”(小于或等于)

示例

#!/bin/bash

a=2
b=2

if [[ $a -eq $b ]]; then
    echo "$a 等于 $b"
else
    echo "$a 不等于 $b"
fi

2.字符串对比

字符串比较参数说明
==字符串相等
!=字符串不相等

示例

#!/bin/bash

a="abcdef"
b="abcde"

# 比较字符串是否相等
if [[ $a == $b ]]; then
    echo "字符串 '$a' 和 '$b' 相等"
else
    echo "字符串 '$a' 和 '$b' 不相等"
fi

# 比较字符串是否不相等
if [[ $a != $b ]]; then
    echo "字符串 '$a' 和 '$b' 不相等"
else
    echo "字符串 '$a' 和 '$b' 相等"
fi

3、算术比较

算术比较参数说明
<小于
==等于
!=不等于
>大于
>=大于或等于
<=小于或等于
#!/bin/bash

num1=5
num2=5

if (( num1 == num2 )); then
  echo "${num1}${num2} 相等"
else
  echo "${num1}${num2} 不相等"
fi


a=10
b=1

if (( (a + b) > 10 )); then
  echo "a 和 b 的和大于 10"
fi

在这里插入图片描述


四、检查命令的退出状态

#!/bin/bash

# 执行某个命令
ls /home > /dev/null 2>&1

# 判断命令是否成功
if [ $? -eq 0 ] ; then
    echo "命令执行成功"
else
    echo "命令执行失败"
fi

# $? 存储的是上一个命令的退出状态。
# 退出状态 0 通常表示命令成功执行,其他非零值表示命令执行失败。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2243807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java中设计模式的使用(持续更新中)

概述 设计模式的目的&#xff1a;编写软件过程中&#xff0c;程序员面临着来自耦合性&#xff0c;内聚性以及可维护性&#xff0c;可扩展性&#xff0c;重用性&#xff0c;灵活性等多方面的挑战&#xff0c;设计模式是为了让程序&#xff08;软件&#xff09;&#xff0c;具有…

Leetcode 有效的数独

这段代码解决的是 验证一个数独是否有效 的问题&#xff0c;其算法思想是基于 规则校验和状态记录。具体思想如下&#xff1a; 算法思想 核心目标&#xff1a; 检查每个数字在 同一行、同一列 和 同一个 3x3 子格 中是否重复。 状态记录&#xff1a; 使用 3 个布尔二维数组分别…

群控系统服务端开发模式-应用开发-前端文件格式功能开发

一、添加视图 在根目录下src文件夹下views文件夹下param文件夹下filedoc文件夹下&#xff0c;新建index.vue&#xff0c;代码如下 <template><div class"app-container"><div class"filter-container" style"float:left;">&l…

可认证数据资产合约标准协议(CMIDA-1)意见征集

标准背景 数据资产具备多维度的属性&#xff0c;涵盖行业特性、状态信息、资产类型、存储格式等。数据资产在不同流通主体之间可理解、可流通、可追溯、可信任的重要前提之一是存在统一的标准&#xff0c;缺失统一的标准&#xff0c;数据混乱冲突、一数多源、多样多类等问题将…

大数据-227 离线数仓 - Flume 自定义拦截器(续接上节) 采集启动日志和事件日志

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…

Solana应用开发常见技术栈

编程语言 Rust Rust是Solana开发中非常重要的编程语言。它具有高性能、内存安全的特点。在Solana智能合约开发中&#xff0c;Rust可以用于编写高效的合约代码。例如&#xff0c;Rust的所有权系统可以帮助开发者避免常见的内存错误&#xff0c;如悬空指针和数据竞争。通过合理利…

redis类型介绍

1. 字符串&#xff08;String&#xff09;&#xff1a; • 简介&#xff1a;最基础的数据类型&#xff0c;可以存储任何形式的字符串&#xff0c;包括文本数据和数字数据。 • 常用操作&#xff1a;SET、GET、INCR、DECR等。 2. 列表&#xff08;List&#xff09;&#xff1a; …

Pytest-Bdd-Playwright 系列教程(10):配置功能文件路径 优化场景定义

Pytest-Bdd-Playwright 系列教程&#xff08;10&#xff09;&#xff1a;配置功能文件路径 & 优化场景定义 前言一、功能文件路径的配置1.1 全局设置功能文件路径1.2. 在场景中覆盖路径 二、避免重复输入功能文件名2.1 使用方法2.2 functools.partial 的背景 三、应用场景总…

HarmonyOs鸿蒙开发实战(17)=>沉浸式效果第二种方案一组件安全区方案

1.沉浸式效果的目的 开发应用沉浸式效果主要指通过调整状态栏、应用界面和导航条的显示效果来减少状态栏导航条等系统界面的突兀感&#xff0c;从而使用户获得最佳的UI体验。 2.组件安全区方案介绍 应用在默认情况下窗口背景绘制范围是全屏&#xff0c;但UI元素被限制在安全区内…

构建安全的数据库环境:群晖NAS安装MySQL和phpMyAdmin详细步骤

文章目录 前言1. 安装MySQL2. 安装phpMyAdmin3. 修改User表4. 本地测试连接MySQL5. 安装cpolar内网穿透6. 配置MySQL公网访问地址7. 配置MySQL固定公网地址8. 配置phpMyAdmin公网地址9. 配置phpmyadmin固定公网地址 前言 本文将详细讲解如何在群晖NAS上安装MySQL及其数据库管理…

【c++丨STL】list的使用

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C、STL 目录 前言 list简介 一、list的默认成员函数 构造函数(constructor) 析构函数 赋值重载 二、list的迭代器接口 迭代器的功能分类 三、list的容量…

如何编译 Cesium 源码

如何编译 Cesium 源码 Cesium 是一个开源的 JavaScript 库&#xff0c;用于构建 3D 地球和地图应用程序。它提供了一套强大的 API 和工具&#xff0c;使开发者能够创建丰富的地理空间应用。本文将指导您如何从 GitHub 下载 Cesium 源码&#xff0c;并在本地进行编译。 TilesB…

实验5:网络设备发现、管理和维护

实验5&#xff1a;网络设备发现、管理和维护 实验目的及要求&#xff1a; 通过实验&#xff0c;掌握Cisco 路由器和交换机的IOS配置管理。自动从NTP服务器获取时间信息。能够利用TFTP服务器实现路由器和交换机配置文件的备份和恢复。同时验证CDP协议和LLDP协议的网络参数。完…

全志T113双核异构处理器的使用基于Tina Linux5.0——RTOS编译开发说明

3、RTOS编译开发说明 3.1、RTOS SDK与TinaLinux开发环境 RTOS SDK相关代码已集成到Tina Linux开发环境&#xff0c;Tina Linux开发环境下的rtos子目录即为RTOS开发环境。 ├──brandy ├──bsp ├──build ├──buildroot ├──build.sh >build/top_build.sh ├──…

汽车资讯新篇章:Spring Boot技术启航

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04目录1. Alopex: A Computational Framework for Enabling On-Device Function Calls with LLMs摘要&#xff1a;研究背景&…

细说STM32单片机DMA中断收发RTC实时时间并改善其鲁棒性的方法

目录 一、DMA基础知识 1、DMA简介 (1)DMA控制器 (2)DMA流 (3)DMA请求 (4)仲裁器 (5)DMA传输属性 2、源地址和目标地址 3、DMA传输模式 4、传输数据量的大小 5、数据宽度 6、地址指针递增 7、DMA工作模式 8、DMA流的优先级别 9、FIFO或直接模式 10、单次传输或突…

review-消息中间件MQ

RabbitMQ RabbitMQ&#xff0c;作为当今流行的开源消息代理软件&#xff0c;以其卓越的可靠性、灵活性和易用性在微服务架构和分布式系统中扮演着至关重要的角色。它不仅能够确保消息在不同系统组件间的高效传递&#xff0c;还能通过其高级消息队列协议&#xff08;AMQP&#x…

使用 .NET 创建新的 WPF 应用

本教程介绍如何使用 Visual Studio 创建新的 Windows Presentation Foundation &#xff08;WPF&#xff09; 应用。 使用 Visual Studio&#xff0c;可以向窗口添加控件以设计应用的 UI&#xff0c;并处理这些控件中的输入事件以与用户交互。 在本教程结束时&#xff0c;你有一…

【青牛科技】视频监控器应用

1、简介&#xff1a; 我司安防产品广泛应用在视频监控器上&#xff0c;产品具有性能优良&#xff0c;可 靠性高等特点。 2、图示&#xff1a; 实物图如下&#xff1a; 3、具体应用&#xff1a; 标题&#xff1a;视频监控器应用 简介&#xff1a;视频监控器工作原理是光&#x…