linux Shell编程之条件语句

条件测试操作

test命令

条件测试操作
Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0(真true)时表示成功,返回值为非0值(假false)时表示失败或异常。
test 命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立($?返回值为 0 表示条件成立)。

条件判断的格式:
test 条件表达式
[ 条件表达式 ]      #中括号两边要留有空格

 

文件测试


格式:[ 操作符 文件或目录 ]

test 选项 文件/目录路径          test 选项  $变量
[ 选项 文件/目录路径 ]           [ 选项  $变量 ]

常用的操作符:
-e:测试目录或文件是否存在(Exist)。
-d:测试是否为目录(Directory)。
-f:测试是否为文件(File)。
-r:测试当前用户是否有权限读取(Read)。
-w:测试当前用户是否有权限写入(Write)。
-x:测试是否设置有可执行(Excute)权限。
-L:测试是否为软链接、符号链接

整数值比较

test 整数1 选项 整数2
[ 整数1 选项 整数2 ]

常用的操作符:
-eq:等于                    ==
-ne:不等于                    !=
-gt:大于                    \>
-lt:小于                    \<
-le:小于等于
-ge:大于等于

字符串比较

test "字符串1" == "字符串2"      [ "字符串1" == "字符串2" ]    [[ "字符串1" == "字符串2" ]]       #判断字符串是否相同
test "字符串1" != "字符串2"      [ "字符串1" != "字符串2" ]    [[ "字符串1" != "字符串2" ]]       #判断字符串是否不同
[[ "字符串1" =~ "字符串2 ]]    #判断字符串1是否包含字符串2
test -z "字符串"      test -z "$变量"   [ -z "$变量" ]     #判断字符串或变量是否为空
test -n "字符串"      test -n "$变量"   [ -n "$变量" ]     #判断字符串或变量是否有字符串

逻辑测试

[ 表达式1 ] && [ 表达式2 ]   [ 表达式1 -a 表达式2 ]    [[ 表达式1 && 表达式2 ]]       且,要求前后表达式条件都成立
[ 表达式1 ] || [ 表达式2 ]   [ 表达式1 -o 表达式2 ]    [[ 表达式1 || 表达式2 ]]       或,只需前后表达式条件成立一个即可

[ 表达式1 ] || 命令1              #如果表达式1条件成立不会执行或运算符后面的命令1,如果表达式1条件不成立则会执行或运算符后面的命令1
[ 表达式1 ] && 命令1 || 命令2     #如果表达式1条件成立则执行命令1,如果表达式1条件不成立则命令2

[ ! 表达式1 ]       #取反,如果表达式1条件成立则最终结果为条件不成立

ping 命令判断对方主机是否存活

-c 4 发送了4个包

如果在线完成ping的表达式则执行且的命令 显示在线

如果ping命令没有完成则执行或的命令 显示不在线

通过脚本来判断对方主机是否存活

判断进程是否正在运行的方法:


systemctl status 进程服务
netstat -lntup | grep :端口/进程名
ss -lntup | grep :端口/进程名
lsof -i :端口
ps -elf | grep 进程名 | grep -v "grep" | grep -v "$$" | wc -l

                                                                        $$进程名本身
pidof 进程名 | wc -w
killall -0 进程名

if语句的结构

单分支结构

if [ 条件表达式 ]      if test 条件表达式      if 命令行 &> /dev/null
then
  命令序列
  ...
fi  

if [ 条件表达式 ];then
  命令序列
  ...
fi 

等效于
[ 条件表达式 ] && 命令

双分支语句

if [ 条件表达式 ]
then
  命令序列
else
  命令序列
fi 

等效于
[ 条件表达式 ] && 命令1 || 命令2

多分支语句

case多分支语句的语法:
case $变量 in
模式1)
  命令序列
  ;;
模式2)
  命令序列
  ;;
....
*)
  命令序列
esac

判断是否为整数

case语句结构

case多分支语句

case多分支语句的语法:
case $变量 in
模式1)
  命令序列
  ;;
模式2)
  命令序列
  ;;
....
*)
  命令序列
esac

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

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

相关文章

C++ | Leetcode C++题解之第77题组合

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> temp;vector<vector<int>> ans;vector<vector<int>> combine(int n, int k) {// 初始化// 将 temp 中 [0, k - 1] 每个位置 i 设置为 i 1&#xff0c;即 [0, k - 1] 存…

单例模式析构时持久化

#include <iostream> #include <fstream> class Singleton { private: // 私有构造函数和拷贝构造函数/赋值运算符&#xff0c;确保单例 Singleton() { // 构造函数中的初始化代码 std::cout << "Singleton created\n"; } ~Singleton()…

用最简单的示例去理解:Dijkstra最短路径算法

Dijkstra算法是一种用于解决单源最短路径问题的经典算法&#xff0c;它能够计算出从单个源节点到图中所有其他节点的最短路径。 以下是Dijkstra算法的基本步骤&#xff1a; 初始化&#xff1a;将起始节点的距离设置为0&#xff0c;将所有其他节点的距离设置为无穷大&#xff0…

如何在您的域名中使用 Google Apps 创建 SPF 记录

关于 SPF 记录 SPF 记录是一种域名服务&#xff08;DNS&#xff09;记录&#xff0c;用于标识哪些邮件服务器被允许代表您的域发送电子邮件。它与在您的 DNS 区域中添加 MX 或 A 记录一样简单。 为什么它很重要&#xff1f; 如今&#xff0c;几乎所有滥用电子邮件消息都携带…

OpenSPG docker 安装教程

文章目录 前言自述 一、OpenSPG1.介绍 二、安装步骤1.安装服务端2.客户端部署 前言 自述 我最近是想结合chatglm3-6b和知识图谱做一个垂直领域的技术规范的问答系统&#xff0c;过程中也遇到了很多困难&#xff0c;在模型微调上&#xff0c;在数据集收集整理上&#xff0c;在知…

echarts饼图渲染

在Vue中使用ECharts渲染饼图&#xff0c;你可以遵循以下步骤&#xff1a; 1. **安装ECharts**&#xff1a; 在你的Vue项目中&#xff0c;首先需要通过npm或yarn来安装ECharts。 npm install echarts --save 或者 yarn add echarts 2. **引入ECharts**&#xff1a; 在你的Vue组…

Spring中的FileCopyUtils:文件复制的利器与详解

1. 概述 在Spring框架中&#xff0c;FileCopyUtils是一个用于文件复制操作的实用工具类。它提供了一系列静态方法&#xff0c;简化了文件从输入流到输出流、从文件到文件等的复制过程。这些方法都基于NIO&#xff08;New I/O&#xff09;技术&#xff0c;提供了高效的文件复制…

面向侧扫声纳目标检测的YOLOX-ViT知识精馏

面向侧扫声纳目标检测的YOLOX-ViT知识精馏 摘要IntroductionRelated WorkYOLOv-ViTKnowledge DistillationExperimental Evaluation Knowledge Distillation in YOLOX-ViT for Side-Scan Sonar Object Detection 摘要 在本文中&#xff0c;作者提出了YOLOX-ViT这一新型目标检测…

Sealos急速部署生产用k8s集群

最近一段时间部署k8s全部使用sealos了&#xff0c;整体使用感觉良好&#xff0c;基本没有什么坑。推荐给大家。 使用 Sealos&#xff0c;可以安装一个不包含任何组件的裸 Kubernetes 集群。 最大的好处是提供 99 年证书&#xff0c;用到我跑路是足够了。不用像之前kubeadm安装…

【6D位姿估计】FoundationPose 支持6D位姿估计和跟踪 CVPR 2024

前言 本文介绍6D位姿估计的方法FoundationPose&#xff0c;是CVPR 2024的满分论文&#xff0c;支持6D位姿估计和跟踪。 通过大规模的合成数据训练&#xff0c;具有强大的泛化能力&#xff0c;在测试新物体时&#xff0c;无需进行微调。 论文地址&#xff1a;FoundationPose:…

1688数据分析实操技巧||1688商品数据采集接口 数据分析

今天&#xff0c;聊一聊B2B平台的数据分析&#xff0c;以1688国内站为例。 1688平台数据接口 1688也属于阿里巴巴的体系&#xff0c;跟淘宝天猫运营很像&#xff0c;因此很多淘宝天猫的玩法调整后也适用于1688。数据分析也是如此。 在1688搞数据分析&#xff0c;搞数据化运营可…

绘唐3 零基础系列教程

绘唐3 团长董事长,即可下载工具 第一讲:安装注册 日期:2024-04-01 17:50:10 录制文件:查看 第二讲:SD,MJ出图配置演示出图 日期:2024-04-01 18:06:46 录制文件:查看

不使用EF框架实现数据库增删改查

创建一个通用的数据访问层 (DAL) 类&#xff0c;让所有需要操作数据库的 DAL 类都继承这个基类&#xff0c;以实现通用的增删改查方法。下面是一个简单的示例展示如何实现这样的通用基类&#xff1a; public class BaseDal<T> where T : class {protected string connec…

【算法训练 day22 最大二叉树、合并二叉树、二叉搜索树的搜索、验证二叉搜索树】

目录 一、最大二叉树-LeetCode 654思路 二、合并二叉树-LeetCode 617思路 三.二叉搜索树的搜索-LeeCode 700思路 四.验证二叉搜索树-LeeCode 98思路 一、最大二叉树-LeetCode 654 思路 本题还是对数组进行切割&#xff0c;然后建立二叉树&#xff0c;递归方式自然是先序遍历。…

代码随想录leetcode200题之二叉树

目录 1 介绍2 训练3 参考 1 介绍 本博客用来记录代码随想录leetcode200题中二叉树部分的题目。 2 训练 题目1&#xff1a;递归遍历&#xff1a;中序、前序、后序 C模板如下&#xff0c; //中序 void traversal(TreeNode* cur, vector<int>& vec) {if (cur NULL…

【笔试训练】day22

1.添加字符 求最少不相等的位数&#xff0c;可以先求最多相等的位数。 在添加字符之前&#xff0c;A和B最多相等的位数是多少&#xff1f;由于A后面可以添加字符&#xff0c;也就使得A字符可以在B的任意一个位置开始比较。遍历一遍这个比较的起点&#xff0c;从这个起点开始跟…

统计二进制中1的个数

编程题&#xff1a; 求一个整数&#xff0c;在内存当中存储时&#xff0c;二进制1的个数。 目录 1.第一种解法2.第二种解法3.第三种解法 1.第一种解法 一个整型的数字共32个比特位&#xff0c;每个比特位如何判断是否为1&#xff1f;只需让这一位和1进行按位与即可 public s…

Linux中的简单操作 ls/tar/pwd/cd/mkdir/touch 等

目录 前言 安装和卸载软件包 ls 查看指定路径下的文件和文件夹 tar 解压缩/压缩命令 pwd 查看当前路径 cd 改变目录 mkdir 创建目录 递归创建 rm rmdir 删除文件或目录 touch 创建文件 ll、echo、重定向符&#xff08;>,>>&#xff09; ll echo 重定向符…

Vue Router 路由hash和history模式

文章目录 hash和history模式区别Hash 模式History 模式 在 Vue 中&#xff0c;路由的两种主要模式是 hash 和 history&#xff0c;默认的路由模式是hash模式。。这两种模式决定了 URL 的外观以及浏览器如何处理 URL 的变化。 hash和history模式区别 特性Hash 模式History 模…

简单负载均衡

题目描述 某工程师为了解决服务器负载过高的问题&#xff0c;决定使用多个服务器来分担请求消息。 现给定 k 台服务器&#xff08;编号从 1 到 k&#xff09;&#xff0c;以及一批请求消息的信息&#xff0c;格式为到达时刻 负载大小&#xff0c;消息说明&#xff1a; 每个时刻…