【shell编程入门】条件判断

前言

在 shell 编程中,[] 通常用于条件测试。

条件中的参数

字符串比较:

  • =: 字符串相等。
  • !=: 字符串不相等。
if [ "$string1" = "$string2" ]; thenecho "字符串相等"
fi

文件测试:

  • -e: 文件或目录是否存在。
  • -f: 是否为普通文件。
  • -d: 是否为目录。
  • -s: 文件是否非空。
if [ -e "/path/to/file" ]; thenecho "文件存在"
fi

数字比较:

  • -eq: 等于。
  • -ne: 不等于。
  • -lt: 小于。
  • -le: 小于等于。
  • -gt: 大于。
  • -ge: 大于等于。
if [ "$num1" -eq "$num2" ]; thenecho "数字相等"
fi

文件权限:

  • -r: 是否可读。
  • -w: 是否可写。
  • -x: 是否可执行。
if [ -r "/path/to/file" ]; thenecho "文件可读"
fi

 实例

 检查文件是否存在

if [ -e "/path/to/file" ]; thenecho "文件存在"
elseecho "文件不存在"
fi

 比较数字大小

num1=5
num2=10if [ $num1 -lt $num2 ]; thenecho $num1 小于 $num2
elseecho $num1 不小于 $num2
fi

 字符串比较

string1="hello"
string2="world"if [ "$string1" = "$string2" ]; thenecho "字符串相等"
elseecho "字符串不相等"
fi

 检查目录是否为空

if [ -z "$(ls -A /path/to/directory)" ]; thenecho "目录为空"
elseecho "目录不为空"
fi

逻辑运算

condition1=true
condition2=falseif [ "$condition1" = true -a "$condition2" = false ]; thenecho "满足逻辑与条件"
elseecho "不满足逻辑与条件"
fi

使用逻辑非判断文件是否不可写

if [ ! -w "/path/to/file" ]; thenecho "文件不可写"
elseecho "文件可写"
fi

 比较字符串长度

str="abc"if [ ${#str} -gt 2 ]; thenecho "字符串长度大于2"
elseecho "字符串长度不大于2"
fi

使用逻辑或检查多个条件

age=25if [ "$age" -lt 18 -o "$age" -gt 65 ]; thenecho "年龄不在工作范围内"
elseecho "年龄在工作范围内"
fi

检查是否为目录

dir="/path/to/directory"if [ -d "$dir" ]; thenecho "是一个目录"
elseecho "不是一个目录"
fi

 检查用户是否具有特定权限

if [ -w "/path/to/file" -a -r "/path/to/file" ]; thenecho "用户具有读写权限"
elseecho "用户缺少读写权限"
fi

使用正则表达式匹配

email="user@example.com"if [[ "$email" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; thenecho "有效的电子邮件地址"
elseecho "无效的电子邮件地址"
fi

 检查命令是否执行成功

if [ $? -eq 0 ]; thenecho "上一个命令成功执行"
elseecho "上一个命令执行失败"
fi

检查变量是否被定义

if [ -z "$my_variable" ]; thenecho "变量未定义"
elseecho "变量已定义"
fi

使用通配符进行字符串匹配

filename="document.txt"if [ "$filename" = *.txt ]; thenecho "文件名以 .txt 结尾"
elseecho "文件名不以 .txt 结尾"
fi

检查用户是否为超级用户

if [ $(id -u) -eq 0 ]; thenecho "当前用户是超级用户 (root)"
elseecho "当前用户不是超级用户"
fi

 检查数组是否为空

my_array=("item1" "item2")if [ ${#my_array[@]} -eq 0 ]; thenecho "数组为空"
elseecho "数组不为空"
fi

使用 case 语句进行多条件判断

fruit="apple"case $fruit in"apple")echo "这是一个苹果";;"banana")echo "这是一个香蕉";;*)echo "未知水果";;
esac

循环遍历目录中的文件并执行操作

directory="/path/to/files"for file in "$directory"/*; doif [ -f "$file" ]; thenecho "处理文件: $file"# 在这里添加你的操作fi
done

根据用户输入执行不同的操作

echo "请选择操作: 1) 备份 2) 恢复 3) 退出"
read choicecase $choice in1)echo "执行备份操作"# 在这里添加备份操作的代码;;2)echo "执行恢复操作"# 在这里添加恢复操作的代码;;3)echo "退出";;*)echo "无效的选择";;
esac

检查多个文件的权限并生成报告

files=( "/path/to/file1" "/path/to/file2" "/path/to/file3" )for file in "${files[@]}"; doif [ -e "$file" ]; thenecho "文件: $file"if [ -r "$file" ]; thenecho "可读"fiif [ -w "$file" ]; thenecho "可写"fiif [ -x "$file" ]; thenecho "可执行"fiecho "---"elseecho "文件不存在: $file"fi
done

循环等待用户输入直到有效输入为止

valid_input=falsewhile [ "$valid_input" = false ]; doread -p "请输入一个有效的数字: " numberif [[ "$number" =~ ^[0-9]+$ ]]; thenecho "有效的输入: $number"valid_input=trueelseecho "无效的输入,请输入一个数字。"fi
done

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

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

相关文章

MySQL事务原理与优化最佳实践

听课问题 除了读未提交,有一个事务对一条数据进行了修改,但是另外又有一个没有加事务的查询sql,那么读取到的数据是原始数据还是没提交的数据。 答案:没加事务的查询读取的是老数据,等事务提交以后就会读取新修改的数据 除了读…

高通平台开发系列讲解(USB篇)DWC3控制USB速率

文章目录 一、设备树二、相关结构体三、最大速率设置四、当前速率设置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文主要介绍高通平台USB DWC3控制USB速率。 一、设备树 目录:msm-4.14/arch/arm64/boot/dts/qcom/sdxprairie-usb.dtsi dwc3@a600000 {compatibl…

为什么谷歌索引的页面数量会变少?

不知道大家是否会经常关注谷歌站长工具(GSC)中的页面索引报告,关注谷歌优化的人可能会时常查看该报告。通过该报告可以查看哪些网页已经编入索引,哪些网页还未编入索引以及未被编入索引的原因。那么今天就来讲下如何诊断收录问题并…

通过myBatis将sql语句返回的值自动包装成一个java对象(2)

1.之前我们是如何执行一个sql语句自动包装成一个java对象呢? 1.创建一个mapper.xml,定义 执行的语句名字 和 包装成什么类 2.在总的配置文件里申明这个mapper 3.在java里通过sqlSession执行mapper里定义好的内容 我们还可以使用另一种方法实现第三步。现…

md5使用教程

md5使用教程 简单介绍: MD5,全称Message-Digest Algorithm 5,是一种被广泛使用的密码散列函数,可以生成一个128位(16字节)的散列值(hash value),通常用32位的十六进制数表…

java如何修改windows计算机本地日期和时间?

本文教程,主要介绍,在java中如何修改windows计算机本地日期和时间。 目录 一、程序代码 二、运行结果 一、程序代码 package com;import java.io.IOException;/**** Roc-xb*/ public class ChangeSystemDate {public static void main(String[] args)…

快速更改flutter已有项目的项目名称和id等

如果你使用了别人已有的仓库模板或者想更改现有项目的名称,是一件非常繁琐的工作,需要修改全平台的文件还是相当麻烦的,所以这里推荐一个小工具,可以帮助大家快速实现更改项目名称的目的,这个工具地址:rena…

MySQL 5.x与8.X 版本差异

MySQL 5.x与8.x 版本之间存在多个重要差异和改进,以下是一些主要的更新内容: 性能改进 MySQL 8.0在查询优化器、并发控制、内存管理和缓存机制等方面进行了显著的性能提升,从而提高了整体处理能力和响应速度。 JSON支持增强 MySQL 5.x对JSON的…

任务14:使用MapReduce提取全国每年最低/最高气温

任务描述 知识点: 使用MapReduce提取数据 重 点: 开发MapReduce程序统计每年每个月的最低气温统计每年每个月的最高气温 内 容: 使用IDEA创建一个MapReduce项目开发MapReduce程序使用MapReduce统计每年每个月的最低气温使用MapReduce…

正则表达式和爬虫

目录 一、正则表达式: 作用: 字符类(只匹配一个字符) 细节 预定义字符字符(只匹配一个字符) 细节 数量词 二、爬虫 Pattern Matcher 要点说明 一、正则表达式: 作用: 1、校验字符…

pytorch集智-5手写数字识别器-卷积神经网络

1 简介 简称:CNN,convolutional neural network 应用场景:图像识别与分类(CNN),看图说话(CNNRNN)等 优越性:和多层感知机相比,cnn可以识别独特的模式&…

【经验总结】使用静态库编译静态库的方法

一,简介 本文主要介绍,如何使用静态库编译生成另外一个静态库的方法。由于编译静态库不能直接链接静态库,需要将静态库解压成.o文件,然后将解压之后的.o文件,连同其他.o文件一起打包成为.a文件。 二,操作…

Kubernetes (K8S) 3 小时快速上手 + 实践

1. Kubernetes 简介 k8s即Kubernetes。其为google开发来被用于容器管理的开源应用程序,可帮助创建和管理应用程序的容器化。用一个的例子来描述:"当虚拟化容器Docker有太多要管理的时候,手动管理就会很麻烦,于是我们便可以通…

二叉树:从基础结构到高级遍历技术

. 个人主页:晓风飞 专栏:数据结构|Linux|C语言 路漫漫其修远兮,吾将上下而求索 文章目录 引言结构定义接口需求构建二叉树销毁二叉树计算节点和叶子的数量二叉树节点个数二叉树叶子节点个数二叉树第k层节点个数 二叉树查找值为x的节点二叉树的…

立白科技集团:研发安全推动数字化蜕变,日化业务再上新高度

立白科技集团成立于1994年,是我国日化行业的领军企业,致力于成为一家“品牌引领、数字经营、富有创新、富有活力”的智慧服务型企业。从2018年开始,立白科技集团加速数字化转型,打造数据和业务中台,并建立toB和toC平台…

修改和调试 onnx 模型

1. onnx 底层实现原理 1.1 onnx 的存储格式 ONNX 在底层是用 Protobuf 定义的。Protobuf,全称 Protocol Buffer,是 Google 提出的一套表示和序列化数据的机制。使用 Protobuf 时,用户需要先写一份数据定义文件,再根据这份定义文…

【Android Studio】使用简单的adb命令远程连接设备进行调试以及文件推送

在使用Android Studio开发时候遇到设调试的时候,由于需要调试的设备不是这种移动设备,需要连接线路到电脑上很不方便操作,后面发现可以通过远程连接的方式,减少不必要的操作复杂度。 一、找到项目中adb配置的工具位置 一般情况下…

使用 rinetd 搭建简单端口重定向服务

rinetd是什么 rinetd(Redirector for TCP connections)是一个用于重定向TCP连接的工具。它允许你将传入的TCP连接从一个指定的IP地址和端口号重定向到另一个地址和端口号。rinetd通常用于端口重定向,使得可以将流量从一个端口转发到另一个端…

【C语言】指针知识点笔记(2)

目录 一、野指针 二、assert断言 三、指针的使用和传址调用 四、数组名的理解 五、使用指针访问数组 一、野指针 二、assert断言 三、指针的使用和传址调用 四、数组名的理解 五、使用指针访问数组

Vue响应式系统(二)

Vue响应式系统(一) 六、嵌套的effect与effect栈。 什么场景会用到effect嵌套呢?听我娓娓道来。 就用Vue.js来说吧,Vue.js的渲染函数就是在effect中执行的: /*Foo组件*/ const Foo {render() {return /*.....*/} }// effect中执行Foo组件中…