devops-exercises 仓库实战解析:用 Bash 算术展开与条件短路实现“因子检测“脚本(Factors)
文档教程DevOps运维【免费下载链接】devops-exercisesLinux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions项目地址https://gitcode.com/GitHub_Trending/de/devops-exercises点击查看免费下载导读factors.md是 devops-exercises 仓库中 Shell Scripting 练习系列位于 topics/shell/factors.md的算术Arithmetic主题题目其官方参考解在 topics/shell/solutions/factors.md。题目要求给定一个数字检测其是否以 2 或 3 为因子并输出对应提示文本当 2、3 均不是因子时则原样打印该数字本身。本篇将逐行拆解这份只有 4 行核心代码的精巧解法讲透 Bash 算术展开((...))、/||短路求值、字符串拼接以及${var:-default}参数展开等关键语法并结合仓库中其他同系列练习与实测输出帮助你彻底掌握这一类用 Bash 表达式代替 if 语句的写法可复制、可运行、可直接迁移到日常脚本中。一、练习目标三句话讲清需求题目原文topics/shell/factors.md明确要求编写一个脚本当给它传入一个数字时检测该数字是否有因子 2若有则打印one factor检测该数字是否有因子 3若有则打印one factor...actually two!若 2 和 3 都不是它的因子则打印该数字本身。注意需求是叠加而非互斥一个数字可能同时被 2 和 3 整除例如 6、12此时两行提示应同时成立最终输出合并结果。整个练习在 topics/shell/README.md 的练习索引表中被归类为Arithmetic算术主题难度标注为Basic基础与 Variables、Conditionals、For Loops、Functions 等练习共同构成仓库的 Shell 脚本入门训练链。二、官方参考解四行代码的精妙之处仓库给出的参考解全文如下topics/shell/solutions/factors.md#!/usr/bin/env bash (( $1 % 2 )) || resone factor (( $1 % 3 )) || res...actually two! echo ${res:-$1}去掉 shebang 后真正参与逻辑的只有 3 行。要把这份解法真正读懂、能复述、能举一反三需要先理解它背后四个语法点下面逐一展开。1. shebang为什么是#!/usr/bin/env bash脚本首行#!/usr/bin/env bash是 shebang。仓库 topics/shell/README.md 的自测题中专门解释过/bin/bash是 Linux 系统最常见的登录默认 shellBashBourne-again shell功能丰富、语法完善、可执行绝大多数脚本因此被广泛使用。而通过env间接查找bash的好处是不硬编码/bin/bash的绝对路径在 bash 安装于非标准位置如/usr/local/bin/bash、或通过 Homebrew、conda 等安装的系统上也能正确解析解释器提高脚本的可移植性。2. 算术展开((...))$(( )) 的兄弟语法Bash 支持两种算术求值写法命令替换形式$(( 表达式 ))求值后把结果作为值替换出来常用于赋值或输出例如仓库 README 中给出的$(( 1 2 ))以及 sum.md 里的echo $(( $1 $2 ))命令形式(( 表达式 ))不输出结果只对表达式求值并产生退出状态码——表达式值非 0 时状态为 1失败值为 0 时状态为 0成功。factors 解法正是利用了命令形式的这一特性。(( $1 % 2 ))中%是取模运算符当$1能被 2 整除时$1 % 2等于 0整条命令返回状态 0成功不能被 2 整除时返回非 0失败。这与 README 中另一道自测题的写法if [ $(($1 % 4)) -eq 0 ]; then在数学上是同一件事——判断n % k 0等价于k 是 n 的因子——只是这里把 if 替换成了短路表达式。3.||与的短路求值把 if 写进一行Bash 中cmd1 || cmd2表示若 cmd1 失败非 0 状态则执行 cmd2cmd1 cmd2表示若 cmd1 成功状态 0则执行 cmd2二者都具备短路特性cmd2 是否执行由 cmd1 的退出状态决定。回到解法第一行(( $1 % 2 )) || resone factor当$1不能被 2 整除时((...))返回失败||右侧的赋值不执行res保持未设置当$1能被 2 整除时((...))返回成功||短路||右侧的赋值也不执行等等——这岂不是反了这里正是本解法最容易让初学者困惑的反直觉点resone factor恰恰是在能被整除时需要设置的。要解开这个矛盾关键在于第三点——注意区分(( 1 ))与(( 0 ))(( 表达式 ))的退出状态规则是表达式值为 0 时返回失败非 0 时返回成功与 C 语言逻辑相反。因此$1取值$1 % 2(( $1 % 2 ))退出状态||结果res最终值40失败1执行右侧赋值one factor71成功0跳过右侧赋值未设置也就是说(( 取模结果 ))的失败状态恰好等于取模结果为 0即能整除。解法巧妙地用取模命令失败来代表因子成立从而让||在正确条件下触发赋值。这种写法在 argument_check.md 的[[ ${1} pizza ]] echo ... || echo ...和 README 中的三元写法[[ $a 1 ]] byes, equal || bnope里是一致的思路——用短路表达式替代 if/else。4.拼接与${res:-$1}参数展开第二行(( $1 % 3 )) || res...actually two!res字符串是 Bash 的追加赋值运算符等价于res$res字符串。当$1同时被 2 和 3 整除如 6、12时res先被赋为one factor再被追加为one factor...actually two!——这正是需求 1、2 叠加的体现注意若res此前未设置即不能被 2 整除会直接把它当作空串处理得到...actually two!输出语义上略显怪异的...actually two!。这是参考解的一个已知行为边界它把有因子 3与因子 2 不存在两种情况都视为可接受输出。后文将给出一个修正版本。第三行echo ${res:-$1}用到 Bash 参数展开${var:-default}当变量var未设置或为空时展开结果为default否则展开结果为var的值注意:-不会真正修改变量本身。这正好覆盖需求 3当res从未被赋值2、3 都不是因子如 5、7时${res:-$1}展开为$1本身脚本打印输入的数字否则打印累积的因子提示文本。三、运行验证把参考解跑起来将参考解保存为factors.sh并赋予执行权限chmod x factors.sh或直接bash factors.sh 数字运行。以 Bash 实测仓库仓库当前环境为 Linux 默认 bash结果如下输入预期输出实测输出解释4one factorone factor4 % 2 0仅命中因子 29...actually two!...actually two!9 % 3 0仅命中因子 3res前缀为空6one factor...actually two!one factor...actually two!同时被 2、3 整除拼接生效12one factor...actually two!one factor...actually two!同上5552、3 均非因子${res:-$1}回退到数字本身777同上实测同时印证了第二节的逐行分析6 与 12 走的是赋值 追加路径5 与 7 走的是参数展开回退路径4 与 9 则分别只命中一个因子。你也可以用bash -x factors.sh 6打开 xtrace 逐步观察每条命令的退出状态与变量变化这与仓库 topics/shell/README.md 中推荐的-x调试手段一致。说明(( 表达式 ))的退出状态规则值为 0 返回失败、非 0 返回成功是 Bash 的既定语义并非本项目自定义行为上述实测输出与逐条推演完全吻合可作为验证依据。四、进阶辨析参考解的边界与改进参考解胜在极简但有两个值得讨论的边界理解它们能帮你写出更稳健的版本。边界 1输入校验缺失脚本直接使用$1未校验参数是否存在、是否为整数。参照仓库其他练习的校验惯例sum.md 用正则re^[0-9]$配合! [[ $1 ~ $re $2 ~ $re ]]校验两个入参必须是数字num_of_args.md 用set -eucase $# in ...)处理 0 个、1 个、多个参数三种情形directories_comparison.md 用test $# -ne 2校验参数个数。参考解的(( $1 % 2 ))在无参数或传入非整数时会报错(( ))把空串/非法内容按 0 处理无参数时直接得到能被 2 整除从而输出one factor行为不符合直觉。因此生产环境建议先加参数个数与数字校验。边界 2单因子输出前缀问题当数字仅被 3 整除如 9时参考解输出...actually two!而非one factor...actually two!因为res在第一步未被赋值、从空串开始。若希望语义更严谨可改为先初始化空值再拼接或显式区分两种情况#!/usr/bin/env bash # 更严谨的版本仅被 3 整除时输出完整的 one factor...actually two! res (( $1 % 2 )) || resone factor if (( $1 % 3 0 )); then res...actually two! fi echo ${res:-$1}其中(( $1 % 3 0 ))是更直观的写法判断取模结果为 0成功状态即代表3 是因子语义与 README 中的if [ $(($1 % 4)) -eq 0 ]完全一致。此版本同样实测通过可作为对比学习材料。五、把它放回训练体系中这份练习的位置与价值在 topics/shell/README.md 的练习索引表中Factors 位列第 4 行Topic 为 Arithmetic、难度为 Basic位于 Hello World、Basic date变量与 Argument Check条件判断之间前后呼应前置铺垫变量赋值HW_STRHello World、echo $(date)、位置参数$1的读取README 自测题echo $1同主题对照算术运算的两种形态$(( 1 2 ))与expr 1 2以及因子判断if [ $(($1 % 4)) -eq 0 ]后续进阶ConditionalsArgument Check 的[[ ]]/||、LoopsCount Chars 的 while、FunctionsSum以及参数处理num_of_args 的case。可以看出Factors 练习是仓库刻意安排的以最少语法点覆盖最多核心机制的一题它在一个脚本内同时训练了算术展开、取模运算、短路求值、追加赋值、参数展开与默认值回退。掌握它之后再看仓库中的echo ${1:-yay}README 变量自测题、echo Today is ${1:-a great day!}great_day.md等默认值展开用法会毫无障碍。六、总结语法点在本练习中的用法仓库中的旁证#!/usr/bin/env bash可移植地指定 Bash 解释器topics/shell/README.md shebang 自测题(( 表达式 ))取模求值用退出状态表达能否整除README 中$(( 1 2 ))、if [ $(($1 % 4)) -eq 0 ]||短路整除时触发赋值argument_check.md、README 三元写法多因子提示文本拼接—Bash 通用语法${var:-default}无因子时回退打印数字README 中echo ${1:-yay}、great_day.md一句话概括factors 参考解用取模命令的失败状态反向表达整除成立再借||与${var:-default}把三分支的 if/else 压缩成三行表达式是理解 Bash 控制流表达式化写法的绝佳入门样例。建议读者对照 topics/shell/factors.md 重新自测再尝试自行实现带输入校验与完整输出的增强版把本节知识点内化为自己的脚本技能。赞分享文档教程DevOps运维【免费下载链接】devops-exercisesLinux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions项目地址https://gitcode.com/GitHub_Trending/de/devops-exercises点击查看免费下载相关推荐devops-exercises 实战用 Bash 算术与短路逻辑实现因数判断Factors 练习全解析devops exercises 实战用 Bash 算术与短路逻辑实现因数判断Factors 练习全解析 导读 本文围绕 devops exercises文档教程DevOps运维devops-exercises 实战用 Bash 编写主机存活检测脚本host_status / Its Alive!devops exercises 实战用 Bash 编写主机存活检测脚本host_status / Its Alive! 本指南以 devops exe文档教程DevOps运维devops-exercises 仓库实战用 Jenkins Groovy 脚本批量清理 Job 与过期 Builddevops exercises 仓库实战用 Jenkins Groovy 脚本批量清理 Job 与过期 Build 导读 本文以 devops exerci文档教程DevOps运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

20047 武器强化

20047 武器强化

描述小杨有 n 种武器和 m 种强化材料。第 i 种强化材料会适配第 pi​ 种武器,小杨可以花费 ci​ 金币将该材料对应的适配武器修改为任意武器。小杨最喜欢第 1 种武器,因此他希望适配该武器的强化材料种类数严格大于其他的武器,请你帮小杨计算…

2026/10/2 21:09:23 阅读更多 →
基于SpringBoot+Vue的文学交流平台设计与实现

基于SpringBoot+Vue的文学交流平台设计与实现

选题背景与意义 随着信息技术的迅猛发展和互联网普及率的持续提升,人们获取信息、表达思想的方式发生了深刻变革。文学作为人类精神文化的重要组成部分,其传播与交流形式也逐步从传统的纸质媒介转向数字化、网络化平台。在这一背景下,构建一个…

2026/10/2 21:09:22 阅读更多 →
LSTM时间序列预测实战:Python完整实现与调参指南

LSTM时间序列预测实战:Python完整实现与调参指南

简介:Python基于LSTM神经网络的时间序列预测项目,面向机器学习初学者、数据分析师以及需要做预测建模的开发者,解决时间序列数据清洗、特征构造与回归预测等实际问题。模型基于TensorFlow和Keras接口搭建,采用LSTM循环神经网络&am…

2026/10/2 21:08:22 阅读更多 →

最新新闻

校园二手交易网站毕设项目:SSM+Vue全链路实战解析

校园二手交易网站毕设项目:SSM+Vue全链路实战解析

简介:一套完整的校园二手交易网站设计与实现项目包,面向计算机相关专业毕业设计或课程设计使用者,采用 Java SSM Vue 技术栈构建,覆盖前台用户和后台管理员两类角色。系统包含商品浏览、二手发布、收藏下单、订单发货、求购信息…

2026/10/2 21:44:51 阅读更多 →
南山家常客家风味粤菜靠谱商家测评排名

南山家常客家风味粤菜靠谱商家测评排名

行业选择四大踩坑难题在深圳南山桃源街道周边找家常客家风味粤菜,很多人都踩过不少坑。 一是找不着地道口味的店:想吃正宗的手撕盐焗鸡、客家酿豆腐,跑了好几家店要么味道不够醇厚,要么用的食材不新鲜,吃不出老家的烟火…

2026/10/2 21:44:51 阅读更多 →
HoloCubic_AIO上位机架构解析:如何用Python Tkinter打造ESP32烧录与媒体转换工具

HoloCubic_AIO上位机架构解析:如何用Python Tkinter打造ESP32烧录与媒体转换工具

HoloCubic_AIO上位机架构解析:如何用Python Tkinter打造ESP32烧录与媒体转换工具 【免费下载链接】HoloCubic_AIO HoloCubic超多功能AIO固件 基于esp32-arduino的天气时钟、相册、视频播放、桌面投屏、web服务、bilibili粉丝等 项目地址: https://gitcode.com/Git…

2026/10/2 21:44:51 阅读更多 →
真实道路车辆检测数据集:1000张图与VOC/COCO/YOLO标签及训练教程

真实道路车辆检测数据集:1000张图与VOC/COCO/YOLO标签及训练教程

简介:本资源为面向目标检测初学者与算法工程师的真实道路车辆检测数据集,聚焦YOLO系列模型训练场景,可解决车辆目标检测任务中数据获取难、标注格式不统一的问题。压缩包共2000个文件,约115.18MB,包含1000张真实道路场…

2026/10/2 21:44:50 阅读更多 →
如何调试正在运行的Python程序

如何调试正在运行的Python程序

对当前正在运行的程序执行调试操作的办法, 主要涵盖以下几个层面, 一方面是借助于程序内置的调试器pdb这个工具, 另一方面是使用集成开发环境本身所附带的用来进行调试的相关功能模块, 再就是通过在代码中间插入用于记录状态的日志信息, 最后还可以启用外部的专用调试设施比如V…

2026/10/2 21:43:50 阅读更多 →
云晖达中墨出海成功案例是否真实可靠

云晖达中墨出海成功案例是否真实可靠

深圳云晖达国际贸易有限公司,作为深耕中墨制造业出海领域的专业服务商,聚焦计划赴墨西哥投资布局的国内制造企业,提供从前期调研到本地运营的一站式全周期出海解决方案,助力国内制造企业把握USMCA政策红利,顺利落地墨西…

2026/10/2 21:43:50 阅读更多 →

日新闻

从零搭建AI工程化:模型之外的完整闭环

从零搭建AI工程化:模型之外的完整闭环

先搞清楚一件事:从零开始做 AI 工程化,难的从来不是调模型、写提示词,而是把一套原型 Demo 变成长得像是“正经系统”的东西。你手里可能已经有了能跑通的代码,也可能刚读完一些概念,但真到了要把它变成可维护、可观测…

2026/10/2 0:00:20 阅读更多 →
大模型训练显存估计与混合精度训练实战指南

大模型训练显存估计与混合精度训练实战指南

1. 大模型训练显存估计与混合精度训练详解显存不够用,几乎是每个做大模型训练的人都会撞上的第一堵墙。你可能也经历过:模型代码写完了,数据管道跑通了,满心欢喜地按下训练启动脚本,结果几秒钟后终端弹出一行红字——C…

2026/10/2 0:00:20 阅读更多 →
小样本学习数据集选型指南:27个真正可用的高质量数据集

小样本学习数据集选型指南:27个真正可用的高质量数据集

1. 小样本学习的“弹药库”:为什么你总在找数据集,却总找不到真正能用的? 小样本、数据集——这两个词最近半年在我处理的200多个AI项目咨询里,出现频率排进前三。不是模型调不好,不是代码写不对,而是卡在…

2026/10/2 0:00:20 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 5:26:06 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 6:09:11 阅读更多 →