shell编程if/then备忘

Miniconda3 安装避坑指南:PATH注入、Shell函数与环境隔离原理 Miniconda3 是 Python 工程中实现环境隔离与依赖管理的核心工具,其本质是一套基于 Shell 函数动态修改 PATH 的轻量级环境调度系统。它不依赖系统 Python,而是通过初始化脚本在 ~/.zshrc 等配置文件中注入函数定义与路径前缀,使 conda activate 能实时切换解释器路径。技术价值在于进程级环境隔离、硬链接复用节省空间、跨平台一致的包管理能力。典型应用场景包括数据科学项目搭建、多版本 Python 兼容测试、CI/CD 环境标准化及 VS Code 编辑器 Pyth 阅读详情

一、基础知识

  1. "[" 是专有命令,而不是普通测试符号(ls /usr/bin/[ 有结果),和test命令等价,并且是内建命令。
  2. bash 2.02 引入 [[...]]扩展测试命令,但是[[是一个关键字,而不是一个命令,Bash把[[ $a -lt $b ]] 看做一个单独的元素,并且返回一个退出状态码
  3. ((...))和let ...结构也能够返回退出状态吗,当他们所测试的算术表达式的结构为非零的时候,将会返回退出状态码0.
  4. if能偶测试任何命令,并不仅仅是中括号中的条件
    if cmp a b &>/dev/null
    then echo "Files a and b are identical"
    else echo "Files a and b diff"
    fi
    #有用的if-grep结构
    if grep -q Bash file
    then echo "File contains at least one occurrence of Bash"
    fi
    word=Linux
    letter_sequence=inu
    if echo "$word" | grep -q "$letter_sequence" 
    #-q 用来禁止输出的
    then 
           echo "Found~"
    else echo "Not Found!"
    fi
  5. test ,/usr/bin/test,[] 和/usr/bin/[都是等价命令
  6. [[ ]]比[ ]更加通用,这是一个扩展的test命令,在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。
    使用[[ ... ]]条件判断结构, 而不是[ ... ], 能够防止脚本中的许多逻辑错误. 比如, &&, ||, <, 和> 操作符能够正常存在于[[ ]]条件判断结构中, 但是如果出现在[ ]结构中的话, 会报错加通用,这是一个扩展的test命令,在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。
二、文件测试操作符
如果下面的条件成立将会返回真.
-e
文件存在
-a
文件存在
这个选项的效果与-e相同. 但是它已经被"弃用"了, 并且不鼓励使用.
-f
表示这个文件是一个一般文件(并不是目录或者设备文件)
-s
文件大小不为零
-d
表示这是一个目录
-b
表示这是一个块设备(软盘, 光驱, 等等.)
-c
表示这是一个字符设备(键盘, modem, 声卡, 等等.)
-p
这个文件是一个管道
-h
这是一个符号链接
-L
这是一个符号链接
-S
表示这是一个socket
-t
文件(描述符)被关联到一个终端设备上
这个测试选项一般被用来检测脚本中的stdin([ -t 0 ]) 或者stdout([ -t 1 ])是否来自于一个终端.
-r
文件是否具有可读权限(指的是正在运行这个测试命令的用户是否具有读权限)
-w
文件是否具有可写权限(指的是正在运行这个测试命令的用户是否具有写权限)
-x文件是否具有可执行权限(指的是正在运行这个测试命令的用户是否具有可执行权限)
-g
set-group-id(sgid)标记被设置到文件或目录上
如果目录具有sgid标记的话, 那么在这个目录下所创建的文件将属于拥有这个目录的用户组, 而不必是创建这个文件的用户组. 这个特性对于在一个工作组中共享目录非常有用.
-u
set-user-id (suid)标记被设置到文件上
如果一个root用户所拥有的二进制可执行文件设置了set-user-id标记位的话, 那么普通用户也会以root权限来运行这个文件. [1] 这对于需要访问系统硬件的执行程序(比如pppd和cdrecord)非常有用. 如果没有suid标志的话, 这些二进制执行程序是不能够被非root用户调用的.
     -rwsr-xr-t    1 root       178236 Oct  2  2000 /usr/sbin/pppd
     
对于设置了suid标志的文件, 在它的权限列中将会以s表示.
-k
设置粘贴位

对于"粘贴位"的一般了解, save-text-mode标志是一个文件权限的特殊类型. 如果文件设置了这个标志, 那么这个文件将会被保存到缓存中, 这样可以提高访问速度. [2] 粘贴位如果设置在目录中, 那么它将限制写权限. 对于设置了粘贴位的文件或目录, 在它们的权限标记列中将会显示t.
     drwxrwxrwt    7 root         1024 May 19 21:26 tmp/
     
如果用户并不拥有这个设置了粘贴位的目录, 但是他在这个目录下具有写权限, 那么这个用户只能在这个目录下删除自己所拥有的文件. 这将有效的防止用户在一个公共目录中不慎覆盖或者删除别人的文件. 比如说/tmp目录. (当然, 目录的所有者或者root用户可以随意删除或重命名其中的文件.)

-O
判断你是否是文件的拥有者
-G
文件的group-id是否与你的相同

-N
从文件上一次被读取到现在为止, 文件是否被修改过

f1 -nt f2
文件f1比文件f2新

f1 -ot f2
文件f1比文件f2旧

f1 -ef f2
文件f1和文件f2是相同文件的硬链接

!
"非" -- 反转上边所有测试的结果(如果没给出条件, 那么返回真).

三、其他测试符
二元比较操作符用来比较两个变量或数字. 注意整数比较与字符串比较的区别.


整数比较

-eq
 等于
if [ "$a" -eq "$b" ]

-ne
不等于
if [ "$a" -ne "$b" ]

-gt
大于
if [ "$a" -gt "$b" ]

-ge
大于等于
if [ "$a" -ge "$b" ]

-lt
小于
if [ "$a" -lt "$b" ]

-le
小于等于
if [ "$a" -le "$b" ]

<
小于(在双括号中使用)
(("$a" < "$b"))

<=
小于等于(在双括号中使用)
(("$a" <= "$b"))

>
大于(在双括号中使用)
(("$a" > "$b"))

>=
大于等于(在双括号中使用)
(("$a" >= "$b"))


字符串比较
=
等于
if [ "$a" = "$b" ]

==
等于
if [ "$a" == "$b" ]
与=等价.

==比较操作符在双中括号对和单中括号对中的行为是不同的.
  1 [[ $a == z* ]]    # 如果$a以"z"开头(模式匹配)那么结果将为真
  2 [[ $a == "z*" ]]  # 如果$a与z*相等(就是字面意思完全一样), 那么结果为真.
  3 
  4 [ $a == z* ]      # 文件扩展匹配(file globbing)和单词分割有效. 
  5 [ "$a" == "z*" ]  # 如果$a与z*相等(就是字面意思完全一样), 那么结果为真. 
  6 
  7 # 感谢, Stephane Chazelas

!=
不等号
if [ "$a" != "$b" ]


这个操作符将在[[ ... ]]结构中使用模式匹配.
<
小于, 按照ASCII字符进行排序

if [[ "$a" < "$b" ]]

if [ "$a" \< "$b" ]

注意"<"使用在[ ]结构中的时候需要被转义.


>
大于, 按照ASCII字符进行排序
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]

注意">"使用在[ ]结构中的时候需要被转义.

参考例子 26-11, 这个例子展示了如何使用这个比较操作符.

-z
字符串为"null", 意思就是字符串长度为零
-n
字符串不为"null".

当-n使用在中括号中进行条件测试的时候, 必须要把字符串用双引号引用起来. 如果采用了未引用的字符串来使用! -z, 甚至是在条件测试中括号(参见例子 7-6)中只使用未引用的字符串的话, 一般也是可以工作的, 然而, 这是一种不安全的习惯. 习惯于使用引用的测试字符串才是正路. [1]

四、逻辑与、或

compound comparison-a

逻辑与

exp1 -a exp2 如果表达式exp1和exp2都为真的话, 那么结果为真.

-o

逻辑或

exp1 -o exp2 如果表达式exp1和exp2中至少有一个为真的话, 那么结果为真.

这与Bash中的比较操作符&&和||非常相像, 但是这个两个操作符是用在双中括号结构中的.

  1 [[ condition1 && condition2 ]]
-o和 -a操作符一般都是和 test命令或者是单中括号结构一起使用的.
  1 if [ "$exp1" -a "$exp2" ]




程序员的思维操作系统:用纯文本构建可检索、可复用的编程日志 编程日志不是简单的代码备忘录,而是一种将碎片化技术经验转化为结构化认知资产的方法论。其核心原理在于以时间戳为索引主键、语义化标记为知识接口、纯文本为唯一真相源,实现高保真留痕与毫秒级检索。这种设计显著提升知识复用效率,降低重复试错成本,在线上故障排查、架构决策回溯、团队知识沉淀等高频工程场景中展现出强大技术价值。尤其适合追求可持续成长的开发者——无论你是刚入门的新手,还是面临知识断层的中级工程师,或亟需建立可传承技术体系的技术负责人。本文详解如何从零搭建一个真正服务于编码实践的programming.log 阅读详情

相关推荐

Claude Code Skills 本质解析:不是插件,而是可编程的AI认知构件

Skills 是 Claude Code 的核心可编程单元,本质上是带元数据的 Markdown 文件与动态脚本的组合体,而非传统意义的插件或扩展。其运行基于按需加载与上下文隔离原理,通过 YAML frontmatter 控制触发逻辑、工具权限和执行环境,借助 `!` 动态注入实现真实世界数据接入。这种轻量、透明、可控的设计赋予开发者对 AI 行为的精确编排能力,支撑从单点自动化(如 git 状态摘要)到多代理协同(Subagents)、事件驱动(Hooks)的工程化落地,广泛应用于代码审查、CI/CD

weixin_30896825的博客 456

shell 测试

Advanced Bash-Scripting Guide: An in-depth exploration of the art of shell scripting Prev   Next 第七章:测试 每一个完善的编程语言都应该能测试一个条件。然后依据测试的结果做进一步的动作。Bash有test命令,各种括号及内嵌的操作符,还有if/then结构

太阳的味道 999

Lua-HTTP安装配置全攻略:从环境搭建到实战应用

HTTP协议作为现代网络通信的基石,其客户端与服务器实现是网络编程的核心技术。在Lua生态中,Lua-HTTP库提供了轻量级、高性能的HTTP/1.x与HTTP/2协议处理能力,尤其适合嵌入式环境与高性能脚本场景。通过LuaRocks包管理器,开发者可以便捷地集成OpenSSL以实现HTTPS支持,并利用cURL后端扩展协议处理范围。该库的价值在于为Lua开发者提供了标准socket库之外的、更优雅高效的网络编程工具,广泛应用于OpenResty模块开发、游戏脚本网络通信及轻量级API服务构建。本文聚焦Lu

cojm55771的博客 422

shell学习之路--条件判断

目录一、条件测试结构二、 实例分析三、文件测试与整数比较

qq_56639008的博客 945

能在Windows资源管理器中打开当前工作路径的VC6插件

VC6插件,作用:在Windows资源管理器中打开当前路径,命令行,记事本。也是VC6 IDE开发环境插件开发的学习示例。 VC6下已经编译通过,使用时,regsvr32 Release\OpenInExplorer.dll注册插件。然后在VC6中启用本插件.

立创EDA手动拼板实战:当自带功能不够用,如何用‘复制粘贴’搞定异形拼版与特殊布局

本文详细介绍了立创EDA手动拼板技术在异形拼版与特殊布局中的应用实战。通过CTRL+SHIFT+V等核心操作技巧,解决混合尺寸拼板、特殊间距需求等复杂场景,提升PCB设计效率与灵活性,特别适合需要高精度控制的射频电路和医疗设备项目。

weixin_31967485的博客 386

shell学习四十七天----文件比较cmp,diff,patch

文件比较 所谓的文件比较,一般设计四个领域 1.检查两个文件是否相同,如果不同,找不哪里不同 2.应用两个文件的不同之处,使从其中一个回复另外一个 3.使用校验和找出相同一致的文件 4.使用数字签名以验证文件       cmp和diff 在文字处理上,最常出现的问题应该是比较两个或两个以上的文件,看看他们的内容是否相同----即便它们的名称不同. 案例: $cp /bin

见证大牛成长之路的专栏 1万+

【obj To 3DTiles 进阶实战】 从零配置地理坐标系与扩展属性元数据

本文详细解析了如何将OBJ模型转换为3DTiles格式,重点介绍了地理坐标系配置与属性元数据扩展的实战技巧。通过obj23dtiles工具,开发者可以精准定位模型经纬高坐标,并添加结构化属性表,实现城市规划模型在数字孪生平台的高效应用。

weixin_27215337的博客 367

Shell中文件比较cmp、diff、patch区别

https://blog.youkuaiyun.com/tanga842428/article/details/79417824 不错 参考一下

wgz7747147820的博客 1267

卡诺图化简法

目录 1.学前需要了解知识点 2.卡诺图(karnaugh map) 3.逻辑函数的卡诺图化简法 4.总结 1.学前需要了解知识点 最小项的定义 最小项的表示方法 最小项的相邻性 最小项的定义:一个函数的某个乘积项包含了函数的全部变量,其中每个变量都以原变量或反变量的形式出现,且仅出现一次,则这个乘积项称为该函数的一个标准积项,通常称为最小项。 最小项的表示方法:通常用来表...

hahasusu的专栏 17万+

ResNet与注意力机制:深度学习中的强强联合

本文详细介绍了ResNet和注意力机制的基本原理,并探讨了如何将两者结合,以提升网络的性能。通过在ResNet中引入注意力机制,网络可以自适应地调整特征图的重要性,从而更加关注于关键区域,提升模型的性能。实验结果表明,引入注意力机制后,ResNet的性能得到了显著提升。未来,随着注意力机制的不断发展,我们可以期待更多创新的网络架构和训练方法,进一步提升深度学习模型的性能。

2401_82355416的博客 1783

图解Linux命令之--cmp命令

该命令用于比较两个二进制文件是否有差异

杰瑞的专栏 4636

WSL2+Docker实战:在Windows上部署MinerU 2.5.3,解锁媲美Demo的VLM PDF解析能力

本文详细介绍了如何在Windows系统上通过WSL2+Docker部署MinerU 2.5.3,实现媲美Demo的VLM PDF解析能力。文章涵盖环境准备、Docker部署实战技巧及高级使用技巧,特别针对PDF识别中的复杂排版、公式和图表处理提供了优化方案,帮助用户高效处理学术论文和技术文档。

weixin_29291573的博客 482

shell 备忘录

shell备忘录

SymbolWoo的博客 529

Android16 RK3576 Bluetooth source和sink模式切换

摘要:本文介绍了在RK3576平台上实现蓝牙A2DP模式动态切换的修改方案。通过在device配置文件中添加A2DP Sink相关属性,修改Bluetooth模块代码实现:1)在Config.java中增加persist.bluetooth.rka2dpsink属性控制模式切换;2)修改A2dpSinkStreamHandler.java取消音频焦点限制;3)调整btif_a2dp_sink.cc默认授予音频焦点。最终通过设置persist.bluetooth.rka2dpsink属性为true/false

tzj1058756809的博客 860

基于STM32、HAL库的MPX5500DP气压传感器 驱动程序设计

define MPX5500DP_MIN_VOLTAGE 0.2f // 最小输出电压(V)#define MPX5500DP_MAX_VOLTAGE 4.7f // 最大输出电压(V)#define MPX5500DP_MIN_PRESSURE 0.0f // 最小压力(kPa)#define MPX5500DP_MAX_PRESSURE 500.0f // 最大压力(kPa)* @brief 读取压力值(kPa)// 计算压力值 (线性转换)

corlin6688的博客 196

Shell逻辑判断备忘录

本文详细介绍了Shell脚本中的条件测试与流程控制语法。主要内容包括:1)三种条件测试工具(单中括号[]、双中括号[[]]、双小括号(()))的语法特点和使用场景;2)常用运算符速查表,涵盖数值比较、字符串比较、文件测试和逻辑运算;3)流程控制结构(if语句和case语句)的基础语法和实际应用示例;4)最佳实践建议,如优先使用[[]]、变量加引号等注意事项。文章通过多个实用脚本示例(成绩判断、文件操作、服务控制等)展示了条件判断在实际开发中的应用。

XINGXIN 531

智能预测性维护AI系统实战效率提升:AI应用架构师的技巧分享

在工业领域,预测性维护(Predictive Maintenance, PdM)是降低停机损失、优化维护成本的关键手段。然而,现有系统往往面临三大效率瓶颈数据处理延迟:工业设备产生的海量实时数据(如传感器、PLC)需传输至云端处理,导致预警滞后;模型推理效率:复杂深度学习模型(如ResNet、Transformer)在边缘设备上推理时间长,无法满足实时要求;落地集成困难:与企业现有ERP、MES、SCADA系统对接繁琐,导致“模型好用但业务不用”的尴尬。本文从架构、数据、模型、落地架构设计。

AI天才研究院 744

Linux命令行与Shell脚本编程

shell脚本编程

qq_36235279的博客 689

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

if语句C

第一次条件判断,如果 a > b,将两变量的值互换,确保 a

weixin_63833170的博客 641

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

shell初级教程-备忘录2

3,SHELL脚本基本知识对于不同的Unix和Linux,使用一段shell脚本将需要一些小小的改动才能运行通过。实际上shell的可迁移性不成问题,但是系统间命令的可迁移性存在差别。在第二行注释中写入脚本名是一个好习惯。 3.1 条件测试写脚本时,有时要判断字符串是否相等,可能还要检查文件状态或是数字测试。基于这些测试才能做进一步动作。Test命令用于测试字符串,文件状态和数字,也很适合...

web开发 327

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

渗透测试实战:命令传输通道构建与隐蔽通信技术详解

在网络安全领域,命令执行与控制是渗透测试与攻防对抗的核心环节。其基本原理在于利用系统漏洞或配置弱点,在目标主机上执行指令并获取回传结果,从而实现信息收集、权限提升或持久化控制。这项技术的核心价值在于突破安全边界,验证系统在真实攻击下的防御有效性。从应用场景看,无论是企业红蓝对抗、CTF竞赛还是安全评估,稳定、隐蔽的命令传输通道都是评估纵深防御能力的关键。本文将聚焦于实战中高频出现的【反向Shell】与【DNS隧道】两种典型技术路径,深入剖析其在不同网络环境下的适用性、绕过防御机制的方法,以及如何结合系统内置

转些好文章,促进分享。 444

Linux入门指南:从命令行基础到系统管理实战

操作系统是计算机系统的核心,负责管理硬件资源和软件应用。Linux作为一种开源操作系统,其内核设计遵循模块化与网络化原则,通过命令行界面(CLI)提供高效的系统交互能力。掌握Linux不仅有助于理解计算机系统的工作原理,更能提升服务器管理、自动化运维和软件开发效率。在云计算、容器化和DevOps等现代技术场景中,Linux技能已成为工程师的必备基础。本文基于Linux学习笔记和系统管理实践,系统梳理了从环境搭建、命令操作到权限管理和服务配置的完整学习路径,帮助初学者构建扎实的Linux知识体系。

weixin_30384217的博客 328

macOS本地AI协作工作流:龙虾AI一键部署与多端直连

本地AI协作工作流是面向开发者构建离线、可控、可审计的智能辅助系统的核心范式,其原理在于绕过云端API依赖,通过轻量级协议桥接、芯片原生运行时与系统级集成实现毫秒响应。技术价值体现在数据不出设备、权限可管可控、跨平台协议兼容,适用于企业微信/飞书消息自动化、Cursor等IDE的Agent窗口中文增强、安卓iOS多端指令分发等真实工程场景。本文聚焦macOS平台,详解基于Ollama与自研Swift桥接器的端到端落地实践,覆盖M芯片与Intel双架构适配、Shell原生部署、系统权限自动化引导等关键环节。

coolmsn8786的博客 320

OpenClaw高效使用指南:六大技能打造个人生产力工作流

在人工智能和命令行工具日益普及的今天,如何高效利用工具提升个人工作效率成为开发者关注的核心。其原理在于通过环境配置、流程自动化和智能集成,将通用工具深度融入个人工作习惯。从技术价值看,这不仅减少了重复劳动,更通过标准化和复用性降低了认知负荷。在应用场景上,无论是代码审查、日志分析、报告生成还是日常事务处理,合理的工具链都能显著提升响应速度和质量。本文以OpenClaw为例,具体阐述了通过环境变量管理、提示词模板化、管道处理、会话记录、输出格式化以及深度集成这六大实用技能,帮助用户构建一套高效、优雅且可复用的

weixin_34133829的博客 416

GPT-4o编程增强实战:不靠新模型的四大技术支柱

大语言模型在编程辅助中的真实价值,不在于版本编号或参数规模,而在于对软件工程约束的理解深度与开发流闭环能力。本文从AST语义解析、跨文件逻辑连贯性、执行反馈闭环速度等可测量指标切入,解析2024年已落地的编程能力增强原理——其核心是上下文感知精度提升与本地化推理调度优化,而非单纯依赖API响应加速。技术价值体现在显著降低人工修正频次、提升CI/CD通过率及规避线上事故;典型应用场景覆盖金融IDE插件、低代码后端编排、合规代码补全等企业级开发现场。文中所有方案均基于GPT-4o与开源模型(如CodeLlama

weixin_34279246的博客 502
上一篇: bash中profile等配置文件执行顺序
下一篇: grep、 sed、 find 、xargs、 gawk 输入输出,好用不好学的东西
workwithwebis3w
博客等级 码龄16年 18粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值