新闻详情

新闻详情

首页 / 资讯中心 / 详情

devops-exercises 实战:用 Bash `while read` 循环与 `wc -c` 实现逐行字符计数

发布时间:2026/10/2 12:34:01来源:尧图网络
devops-exercises 实战:用 Bash `while read` 循环与 `wc -c` 实现逐行字符计数
文档教程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 仓库中 Count Chars 练习及其官方解法为主线系统讲解 Bash 交互式输入、while循环读取与wc字符计数的完整套路。读完本文你将能够独立编写一个持续读取用户输入、逐行统计字符数、遇到空行自动退出的 Bash 脚本并理解read、echo -n、wc -c等关键命令的底层行为与常见坑点。练习背景这道题在考什么在 topics/shell/README.md 的 Shell Scripting 练习表中Count Chars 被明确归类为Input While Loops输入 While 循环难度标注为 Basic基础。它紧跟在Files SizeFor 循环之后、Sum函数之前是仓库刻意设计的循环控制结构进阶练习前一道题教你用for遍历列表这道题则要求你改用while持续消费交互式输入流。原始练习文档 count_chars.md 给出的目标是从用户处读取输入直到得到空字符串为止对于读到的每一行统计字符数量并打印出来。约束条件只有两条必须使用 while 循环且假设至少有 3 行输入。也就是说这道题刻意禁止你用for、xargs、awk等旁路方案强制你掌握while read这一经典模式。官方解法逐行拆解仓库给出的标准答案位于 solutions/count_chars.md完整代码如下#!/usr/bin/env bash echo -n Please insert your input: while read line; do echo -n $line | wc -c echo -n Please insert your input: done这段脚本虽短却串联起了四个 Bash 核心知识点我们逐一展开。1. Shebang#!/usr/bin/env bash首行#!/usr/bin/env bash是 shebang 行。与直接写#!/bin/bash不同env方式会去PATH环境变量中查找bash的绝对路径因此在 bash 安装位置不固定的系统上更具可移植性。仓库的 Shell 自学评估章节见 topics/shell/README.md也专门解释了 shebang 的含义/bin/bash是 Linux 用户登录时最常见的默认 shellBourne-again shell 功能更全、语法更完善因此被广泛采用。保存为count_chars.sh后可通过以下方式运行bash count_chars.sh # 方式一显式指定解释器 chmod x count_chars.sh ./count_chars.sh # 方式二赋予执行权限后直接运行shebang 生效2.echo -n不换行输出提示符echo -n表示输出后不追加换行符。脚本用它打印Please insert your input: 让光标停留在提示符末尾用户输入与提示符处于同一行交互体验更自然。这一处细节也是后面统计结果正确的关键前提原因见第 4 节。3.while read line循环读取输入直到空串read是 Bash 内建命令作用是从标准输入或指定文件描述符读取一行并存入变量。仓库 README 的自学评估部分对此有精辟概括Using the keywordreadso for exampleread xwill wait for user input and will store it in the variable x用read x等待用户输入并存入变量 x。while read line; do ... done的完整语义是每次循环迭代开始时read line阻塞等待一行输入读到的内容存入变量line当读到空串直接回车或到达 EOF如 CtrlD时read返回非零退出码循环条件不成立while自动终止。这正是练习目标 1Read input from the user until you get empty string的实现机制无需显式break或判断语句read的退出状态本身就是天然的循环结束条件。脚本在循环体末尾再次echo -n打印提示符形成提示 → 输入 → 统计 → 再提示的循环下一轮read继续等待。若想一次性输入多行后批量处理例如输入以文件或管道方式重定向while read line同样适用此时循环会逐行消费标准输入直到 EOF。4.wc -c为什么能数对字符数wcword count的-c选项统计字节数。管道echo -n $line | wc -c的执行链条是echo -n $line输出变量内容不加换行管道|把该输出接到wc -c的标准输入wc -c统计收到的字节数并打印。这里有两个极易踩坑的细节echo必须加-n。echo默认会在末尾追加换行符\n1 个字节若写成echo $line | wc -c统计结果会比实际字符数多 1。解法用echo -n正是为了剔除这个隐形多出的换行字节。-c统计的是字节而非字符。对纯 ASCII 输入字母、数字、标点而言字节数等于字符数但如果输入包含 UTF-8 多字节字符如中文中占 3 字节、emoji 占 4 字节wc -c报出的数字会大于实际字符数。需要按字符数统计时应改用wc -m或使用 Bash 的字符串长度语法${#line}。练习文档假定的是常规英文交互输入因此wc -c是合理且最直接的答案。5. 约束条件如何被满足必须使用 while 循环解法正体就是while read line; do ... done无for、until或其他循环结构假设至少有 3 行输入保证脚本能至少展示 3 轮完整的提示—统计迭代便于人工验证循环确实在持续工作。一次完整的运行演示假设脚本已保存为count_chars.sh典型交互过程如下hello、world、空行依次输入末尾CtrlD或直接回车结束$ bash count_chars.sh Please insert your input: hello 5 Please insert your input: world 5 Please insert your input: 0 Please insert your input:hello为 5 个字符wc -c输出5world同为 5 个字符输出5直接回车输入空串echo -n 输出 0 字节wc -c输出0随后read读到空串返回非零状态循环结束。注意最后一次提示符之后程序便退出这正是目标 1读到空字符串即停止的直接体现。纵向扩展边界情况、健壮性与常见改进空白行与多字节字符输入为空格串如 时read默认按IFS内部字段分隔符拆分可能把行内容吃掉严格场景可改用while IFS read -r line-r防止反斜杠转义IFS避免首尾空白被剥离。需要按字符统计时wc -m或${#line}是更好的选择尤其是涉及中文、日文等 UTF-8 内容时。管道子 shell 陷阱while read若出现在管道右侧如cat file | while read line; do ...; done循环体会在子 shell 中执行循环内部对变量的修改在循环结束后不会保留到父 shell。本练习直接读取终端输入、不涉及管道因此不存在此问题但编写批量文件处理脚本时务必留意这一 Bash 经典坑点。交互式输入的退出方式除输入空行外用户也可用CtrlD发送 EOF 信号结束循环。两种方式都依赖read返回非零状态这一统一机制脚本无需额外处理。结合仓库证据解法与练习文档的对应关系知识点仓库依据练习定位Input While Loopstopics/shell/README.md 练习表中的 Count Chars 行练习原始目标与约束topics/shell/count_chars.md标准解法topics/shell/solutions/count_chars.mdread关键字用法说明topics/shell/README.md 自学评估如何获取用户输入条目shebang 语义topics/shell/README.md 自学评估第一条循环练习题组Files SizeFor 循环、Sum函数从源码结构可以推断仓库将 Shell 练习按难度递进编排Hello World变量→Basic date变量→Argument Check条件判断→Files SizeFor 循环→Count Chars输入 While 循环→Sum函数。count_chars.md正处于从循环结构过渡到函数封装的衔接位置是掌握交互式脚本的基础必修课。小结Count Chars 表面上是统计字符的小练习实际覆盖了 Bash 脚本四大基础能力shebang 与执行方式、read的交互式输入语义、while循环借助退出码实现读到空即停、以及wc -c/echo -n配合管道做精确字节统计。理解这四点的组合逻辑后你可以轻松把它改造为更通用的逐行处理工具——例如把wc -c换成wc -w统计单词数、把提示词换成自定义参数、或把输入源从键盘换成文件重定向从而应对各类交互式或批量文本处理需求。赞分享文档教程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 while 循环逐行读取用户输入并统计字符数Count Charsdevops exercises 实战用 Bash while 循环逐行读取用户输入并统计字符数Count Chars 导读 本文围绕 devops ex文档教程DevOps运维bash循环读取文件while read line结构bash循环读取文件while read line结构 你是否还在为处理日志文件、配置解析或数据清洗时的逐行读取需求而烦恼本文将系统讲解 while rea教程devops-exercises 实战用 Python 实现字符串压缩与解压Run-Length Encodingdevops exercises 实战用 Python 实现字符串压缩与解压Run Length Encoding 本篇技术指南围绕 devops exe文档教程DevOps运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Linux退出码详解:从POSIX规范到自动化排错实战 2026/10/2 15:48:20

Linux退出码详解:从POSIX规范到自动化排错实战

1. 为什么一个看似简单的“退出码”值得专门做一张对照表?你有没有过这样的经历:在写 Shell 脚本时,if [ $? -eq 0 ]; then ...这行代码抄了十年,却从没真正搞懂$?到底能取哪些值、每个值背后代表什么真实含义?或者某…

阅读更多 →
PICO Neo3移动VR场景性能优化实战:从帧时间账单到稳定72帧 2026/10/2 15:48:08

PICO Neo3移动VR场景性能优化实战:从帧时间账单到稳定72帧

写这篇之前,先把背景交代清楚:这个“把风格化村庄塞进 PICO Neo3”的系列,前面四篇分别处理了场景搭建、交互逻辑、手柄定位和 UI 框架。前四篇收尾时,工程里已经有了一个看起来像模像样的村庄:小房子、石头路、木栅栏…

阅读更多 →
硬件测试工程师的六大核心能力:从故障检测到设计守门 2026/10/2 15:48:07

硬件测试工程师的六大核心能力:从故障检测到设计守门

1. 硬件测试不是“通电看灯亮”,而是系统性故障预演很多人刚入行时以为硬件测试就是拿万用表测测电压、示波器看看波形,插上电,灯亮了——“OK,过!”我带过的三届应届生里,有七成在入职前三个月都卡在这个认…

阅读更多 →
55873生态:混合模型×四层智能体×安全策略编排的AI落地全解 2026/10/2 15:48:07

55873生态:混合模型×四层智能体×安全策略编排的AI落地全解

先亮个底:这个题目里的“55873 生态”,不是某个开源仓库的代号,也不是哪家云厂商的套餐编号。它是一套完整的内部体系编号—— 5 代表五个核心业务域, 5873 是我这边项目的迭代版本号,里面包含“613 混合模型 四层…

阅读更多 →
Anymaker汉化补丁实操指南:从版本匹配到界面全中文 2026/10/2 15:48:07

Anymaker汉化补丁实操指南:从版本匹配到界面全中文

先交代一个背景:前几天有位玩3D打印的朋友找我,说他在官网下载了Anymaker切片软件,打开以后界面全是英文,打印参数看得头皮发麻。他怀疑是自己下载错了版本,到处找中文包,但搜了一圈,信息七零八…

阅读更多 →
AI日报盘点:智能体训练、并发实战与AI创作工具应用指南 2026/10/2 15:48:07

AI日报盘点:智能体训练、并发实战与AI创作工具应用指南

今天的AI资讯日报,信息量比平时大不少。先是DeepSeek公开了智能体训练的新方法,紧接着“AI Agent怎么扛并发”这个话题又被翻出来热议,工具侧则是视频修复、短剧工作流、编程辅助各种更新扎堆。我花了一上午把这些热点捋了一遍,也…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉