【Shell】常见的 Shell 条件测试选项和控制命令的总结和整理

ops/2024/10/17 21:21:08/

1. 字符串比较

  • -z "$var": 判断字符串是否为空,长度为 0 时返回 true
  • -n "$var": 判断字符串是否非空,长度大于 0 时返回 true
  • "$var" = "$var2": 判断两个字符串是否相等。
  • "$var" != "$var2": 判断两个字符串是否不相等。

2. 文件判断

  • -e "/path/to/file": 判断文件或目录是否存在。
  • -f "/path/to/file": 判断是否为普通文件。
  • -d "/path/to/dir": 判断是否为目录。
  • -r "/path/to/file": 判断文件是否可读。
  • -w "/path/to/file": 判断文件是否可写。
  • -x "/path/to/file": 判断文件是否可执行。

3. 数字比较

  • -eq: 判断两个数字是否相等。
    if [ "$num1" -eq "$num2" ]; thenecho "Numbers are equal"
    fi
    
  • -ne: 判断两个数字是否不相等。
  • -gt: 判断第一个数字是否大于第二个数字。
  • -lt: 判断第一个数字是否小于第二个数字。
  • -ge: 判断第一个数字是否大于或等于第二个数字。
  • -le: 判断第一个数字是否小于或等于第二个数字。

4. 逻辑操作

  • !: 逻辑非,用于取反。
    if [ ! -e "/path/to/file" ]; thenecho "File does not exist"
    fi
    
  • &&: 逻辑与,用于组合条件。两个条件都为真时返回 true
    if [ -f "/file" ] && [ -r "/file" ]; thenecho "File exists and is readable"
    fi
    
  • ||: 逻辑或,用于组合条件。只要有一个条件为真时返回 true

5. set -e

  • set -e: 在 Shell 脚本中,如果任何命令返回非零状态(即执行失败),脚本将立即退出。这有助于防止脚本继续执行失败后的代码。

6. 示例

判断文件是否存在并可读:

if [ -f "/path/to/file" ] && [ -r "/path/to/file" ]; thenecho "File exists and is readable"
fi

检查变量是否为空:

if [ -z "$var" ]; thenecho "The variable is empty"
fi

检查 API 密钥是否设置:

if [ -z "$API_KEY" ]; thenecho "Error: API_KEY is not set."exit 1
fi

判断数字大小:

if [ "$num1" -gt "$num2" ]; thenecho "$num1 is greater than $num2"
fi

总结

  • 字符串判断: -z-n=!=
  • 文件判断: -e-f-d-r-w-x
  • 数字比较: -eq-ne-gt-lt-ge-le
  • 逻辑操作: !&&||
  • 控制脚本行为: set -e 确保命令失败时立即退出脚本。

这些条件和控制选项是 Shell 脚本中常见的基本工具,帮助编写健壮和灵活的脚本。


http://www.ppmy.cn/ops/126301.html

相关文章

多jdk版本环境下,jenkins系统设置需指定JAVA_HOME环境变量

一、背景 由于不同项目对jdk版本的要求不同,有些是要求jdk11,有些只需要jdk8即可。 而linux机器上安装jdk的方式又多种多样,最后导致jenkins打包到底使用的是哪个jdk,比较混乱。 1、java在哪 > whereis java java: /usr/bin/…

MySQl数据库的基本操作

1.1创建数据库 使用CREATE DATABASE语句可以轻松创建MySQL数据库,语法如下: CREATE DATABASE 数据库名; 例:创建fruitsales数据库 CREATE DATABASE fruitsales;1.2 查看数据库 使用SHOW语句查看当前服务器下所有已经存在的数据库 SHOW DAT…

python 中*的用处

自己经常混*的用处,为此特意总结记录。 在Python中,函数定义中的*(星号)用于指示位置参数的结束和关键字参数的开始。具体来说,*之后的参数必须以关键字参数的形式传递。 用在函数参数中 在我的例子中: …

Tortoise SVN 安装汉化教程(乌龟SVN)

1.首先下载 去官网下载 如果下载比较慢的,链接自取 https://pan.quark.cn/s/cb6f2eee3f90 2. 安装Tortoise SVN 无脑next到完成 最后到桌面右键 你就发现svn出来了,但是是英文的!!!! 像我这种英文不好的…

牛客小白月赛102:最短?路径(分层bfs)

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 给定一个 nnn 个点 mmm 条边的无向图,LH 打算从点 111 出发去点 nnn。 假如 LH 到达了一个点 iii,那么他可以选择在这个点花费 aia_iai​ 的时间休息后继续赶…

蓝桥算法双周赛 第 19 场 小白入门赛

打开石门 只要有相连的一样字母就可以消成一个 string s; int ans;void solve() {cin >> s;int len 0;for (int i 0;i < s.size();i ){if (s[i] L) len ;else //遇到Q{ans (len ? 1 : 0); //消除累计的Llen 0;ans ;//遇到Q}}//QLLLL时,最后遇不到Q让累计的L消…

LangChain中使用Prompt01

1.引入提示模板 from langchain.prompts import (SystemMessagePromptTemplate,AIMessagePromptTemplate,HumanMessagePromptTemplate, )2.设置系统提示 system_template_text"你是一位专业的翻译&#xff0c;能够将{input_language}翻译成{output_language}&#xff0c…

Spring Boot知识管理:跨平台集成方案

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