
文档教程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 仓库中 topics/shell/hello_world.md及其配套 topics/shell/solutions/hello_world.md为骨架系统讲解 Bash 脚本最基础的三大能力变量定义、变量引用与标准输出重定向。读者完成本篇后将能够独立编写一个定义变量并将其输出写入文件的可运行 Bash 脚本同时掌握 shebang、echo、重定向等核心语法并可通过仓库内系列练习Basic Date、Great Day、Argument Check 等继续进阶为后续 DevOps 面试题条件判断、循环、函数、调试打下地基。练习目标来自 devops-exercises 的原始任务该练习位于仓库 topics/shell/hello_world.md是topics/shell/README.md练习清单中的第一个任务被标注为Basic基础难度、主题为Variables变量。原始目标只有两条定义一个变量其值为字符串Hello World打印该变量的值并将输出重定向写入文件amazing_output.txt。虽然任务简单但它同时覆盖了 Bash 脚本中两个高频考点——变量的定义与展开、标准输出stdout的重定向是后续所有 Shell 练习日期、条件判断、循环、函数的公共基础。官方解决方案一行变量 一行输出仓库中 topics/shell/solutions/hello_world.md 给出的官方实现如下#!/usr/bin/env bash HW_STRHello World echo $HW_STR amazing_output.txt下面逐行拆解这段只有 5 行的脚本把每行的作用和背后的规则讲透。第一行shebang —— 脚本解释器声明#!/usr/bin/env bash这是 Bash 脚本的 shebang又称 hash-bang行作用是告诉操作系统当脚本被直接执行./script.sh时应该使用哪个解释器来运行它。此处使用#!/usr/bin/env bash而非写死的#!/bin/bash其优势是env会在用户PATH中查找bash从而提升脚本在不同发行版、不同安装路径下的可移植性。topics/shell/README.md 的自测问答区也专门考察了这一知识点要点如下/bin/bash是最常见的用户登录默认 shellbash是Bourne-again shell的缩写Bash 能执行绝大多数脚本功能完善、语法成熟因此被广泛使用写 shebang 后还需要为脚本文件添加可执行权限例如chmod x hello_world.sh才能直接运行若不加权限也可以用bash hello_world.sh显式调用。第二行变量定义 —— 等号两侧不能有空格HW_STRHello WorldHW_STR是变量名值Hello World用双引号包裹。由于值中包含空格必须加引号否则Hello与World会被解析为两个独立的词。Bash 变量赋值的语法是变量名值等号两侧绝对不能有空格。这一点是经典陷阱HW_STR Hello World会被当成执行一个名为HW_STR的命令并传入两个参数而不是赋值。README 自测区的题目Running the following bash script, we dont get 2 as a result, why?给出的答案就是应写为x2而非x 2。变量名通常约定使用大写字母如HW_STR便于与命令区分命名只能由字母、数字、下划线组成且不能以数字开头。除直接赋值外变量还可以通过命令替换得到值例如 README 自测题中的DATE$(date)—— 将date命令的输出存入变量DATE。这一写法在 topics/shell/solutions/basic_date.md 中也有体现echo $(date) the_date.txt。第三行echo 打印 重定向写入文件echo $HW_STR amazing_output.txt这行同时完成了两件事echo $HW_STR展开变量。$HW_STR会替换为变量中的实际值Hello Worldecho将其打印到标准输出。注意官方写法未加引号在实际使用中建议写成echo $HW_STR用双引号包裹变量以保留值内部的空格并避免通配符展开等副作用。 amazing_output.txt输出重定向。会将命令的标准输出stdout写入文件amazing_output.txt。行为要点如下若文件不存在则创建它若文件已存在则先清空再写入截断模式覆盖写场景下如需追加内容应改用若需把错误信息写入文件则使用221可将标准错误与标准输出合并重定向。运行后amazing_output.txt中的内容就是一行Hello World可通过cat amazing_output.txt验证。相比直接echo Hello World amazing_output.txt本练习刻意要求先定义变量再输出目的是让学习者建立变量是数据容器、echo 是输出通道、重定向决定数据去向的完整心智模型。源码佐证变量与重定向在仓库系列练习中的延伸Hello World 只是变量主题的起点devops-exercises 的topics/shell/目录围绕变量、算术、条件、循环、函数、case、杂项组织了一整套渐进式练习见 topics/shell/README.md 的练习表格。Hello World 中学到的变量与重定向技能会在下列练习中反复复用Basic Date变量把当前日期写入the_date.txt。官方解 topics/shell/solutions/basic_date.md 为echo $(date) the_date.txt演示了命令替换结果的重定向——与 Hello World 的 file语法完全一致只是数据来源从静态字符串变成了命令输出。Great Day变量无参数时打印Today is a great day!有参数时打印参数。官方解 topics/shell/solutions/great_day.md 为echo Today is ${1:-a great day!}其中${1:-default}是参数默认值展开$1未提供时回退到a great day!。这与 Hello World 的$HW_STR同属变量展开范畴但引入了特殊位置参数与默认值兜底两个新概念。Argument Check条件判断判断参数是否为字符串pizza。官方解 topics/shell/solutions/argument_check.md 为[[ ${1} pizza ]] echo with pineapple? || echo I want pizza!展示了如何用[[ ]]测试表达式配合/||实现 Bash 风格的三元逻辑——README 自测区把这种写法归纳为[[ $a 1 ]] byes, equal || bnope。从源码结构看Hello World 之后的学习路径是先熟练变量Basic Date、Great Day再进入算术Factors、条件Argument Check、循环Count Chars、Files Size、函数Sum、caseNumber of Arguments形成一条完整的 Shell 能力进阶链。变量深入从HW_STR到面试高频考点结合 topics/shell/README.md 的 Shell Scripting - Variables 自测区把变量知识补全到面试深度位置参数与特殊变量写法含义$0脚本自身的名称$1、$2…依次传入脚本的第 1、2… 个位置参数echo $1即可打印第一个参数$#传入参数的个数$?上一条命令的退出状态码0 表示成功$$当前进程的 PID$所有参数组成的数组$*所有参数组成的单个字符串${1:-default}参数 1 为空/未提供时回退为defaultREADME 自测区特别区分了$与$*$是参数数组$*是拼接后的单个字符串在需要逐个遍历参数时应使用$。变量作用域local 与函数README 自测区有一个经典作用域题脚本先定义NINJA_TURTLEDonatello函数内用local NINJA_TURTLEMichelangelo并echo $NINJA_TURTLE函数调用前又赋值NINJA_TURTLERaphael最终输出是Michelangelo。原因在于local声明使函数内的同名变量只作用于函数作用域函数返回后外部变量不受影响。这与 Hello World 中全局赋值 直接展开的简单模型形成对照也是 DevOps 面试中高频考察的作用域知识点。用户输入与字符串操作获取用户输入用readread x会等待输入并把内容存入变量xREADME 自测区与 topics/shell/solutions/count_chars.md 均有使用。比较两个变量长度可用${#1}if [ ${#1} -ne ${#2} ]; then ...。子串提取${var%.*}取出最后一个点之前的部分${var//*.}取出最后一个点之后的部分README 子串章节。输出重定向深入数据该流向哪里Hello World 只用了一种重定向把这一语法族完整列出可覆盖大多数实战场景语法作用cmd filestdout 写入 file覆盖cmd filestdout 追加到 filecmd 2 filestderr 写入 filecmd 21stderr 合并进 stdoutcmd file从 file 读取 stdincmd 2/dev/null丢弃错误输出此外README 自测区还提到进程替换process substitutiondiff (ls /tmp) (ls /var/tmp)可以把命令输出当作文件传给不支持 stdin 的命令如diff适合需要同时比较多个命令输出的场景——它属于重定向的进阶形态面试常被追问。调试与最佳实践从能跑通到写得稳Hello World 脚本能跑通但进入生产或面试环节时README 自测区总结的调试与规范同样值得固化默认行为Bash 脚本中某条命令失败时脚本默认不会退出而是继续执行后续命令。若希望失败即停在脚本开头加入set -e。调试手段运行脚本时加-x如bash -x script.sh逐行跟踪展开后的命令传统做法是在关键位置加echo打印中间值。脚本注释README 自测区建议在每个脚本中写清如何运行、做什么事并视情况使用set -e。三元/简写[[ $a 1 ]] byes || bnope是 if/else 的紧凑写法Argument Check 的官方解即采用了该风格。为什么还要学 Shell与 CM 工具的定位差异针对有 Ansible、Puppet、Chef 为何还学 Shell这一 DevOps 经典问题topics/shell/README.md 自测区给出了值得背诵的要点速度与灵活性某些场景缺少所需模块多数 CM 工具也确实提供 shell 模块以及需要把脚本交付给无外网、未安装 CM 工具的客户环境。这与本仓库定位一致——topics/shell/系列含solutions/目录下的全部官方解答正是为面试速成与日常自动化打底的最小闭环。动手验证三步跑通并扩展参照官方解创建hello_world.sh写入 shebang、变量定义与echo $HW_STR amazing_output.txt执行bash hello_world.sh后运行cat amazing_output.txt看到Hello World即为成功依次挑战 topics/shell/basic_date.md、topics/shell/great_day.md、topics/shell/argument_check.md对照solutions/目录下的官方解自查进阶可继续完成 topics/shell/factors.md算术与取模、topics/shell/sum.md函数与输入校验、topics/shell/count_chars.mdwhile 循环与字符计数。小结Hello World 练习虽然只有定义变量 输出重定向两行核心逻辑却是整个 topics/shell/README.md 练习体系变量 → 算术 → 条件 → 循环 → 函数 → case → 杂项的起点。掌握变量值等号无空格、$VAR展开、 file重定向再叠加set -e、bash -x等调试习惯即可从容迈入仓库中更复杂的 Shell 练习与 DevOps 面试题。建议将本篇与solutions/目录中的官方答案对照阅读逐行追问为什么这样写这是该仓库设计的初衷也是 Shell 能力提升最快的方式。赞分享文档教程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 实战从 Hello World 出发掌握 Bash 变量定义、echo 输出与重定向devops exercises 实战从 Hello World 出发掌握 Bash 变量定义、echo 输出与重定向 本篇技术指南以 devops exer文档教程DevOps运维learnyounode 入门第一课用 HELLO WORLD 练习掌握 Node.js stdout 输出与 verify 验证机制learnyounode 入门第一课用 HELLO WORLD 练习掌握 Node.js stdout 输出与 verify 验证机制 learnyounod教程CLIAnsible 入门第一课编写第一个 Task 创建目录 —— devops-exercises 实战指南Ansible 入门第一课编写第一个 Task 创建目录 —— devops exercises 实战指南 本指南以 devops exercises 仓库中文档教程DevOps运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考