ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

yeyeeyeyyeyeyeyeyeyeyeyeyeye

yeyeeyeyyeyeyeyeyeyeyeyeyeye 课堂笔记Shell 脚本最朴素的形态就是把多个命令串联在一起执行。在命令行 中我们可以用分号将多个命令放在同一行shell 会按顺序依次执行它们。这种方式虽然简单但已经体现了脚本的核心思想——将一系列操作自动化。比如 date; who 会先显示当前时间再显示登录用户信息两个命令互不干扰依次输出结果。一.创建 Shell 脚本文件当命令数量增多或逻辑变复杂时把命令写入文件才是更可持续的方式。创建脚本文件时有几个关键点需要留意1.指定解释器脚本第一行必须是 #!/bin/bash这告诉系统使用哪个 shell 来执行该脚本。其中 #! 是特殊标记普通行以 # 开头的则是注释唯独第一行例外。2.运行方式脚本创建后不能直接运行因为 shell 只在 PATH 环境变量指定的目录中查找命令。有两种方式可以执行脚本将脚本所在目录加入 PATH使用绝对路径或相对路径如 ./script.sh显式指定3.执行权限如果遇到 Permission denied需要用 chmod ux script.sh 为文件所有者添加执行权限。二.显示消息 —— echo 命令echo 是在脚本中与用户交互最基本的手段用于输出提示信息或运行状态。使用时有几个小细节值得注意文本字符串可以不用引号括起来但如果文本中包含引号则需用另一种引号将整个字符串包住。默认情况下 echo 会在输出末尾自动换行若想让后续内容接在同一行可以使用 -n 选项。这样用户就能清楚脚本正在执行什么操作而不是面对一堆黑屏等待。三、使用变量变量是脚本中临时存储数据的容器分为环境变量和用户自定义变量两类。3.1 环境变量系统预定义的环境变量如 $USER、$HOME、$UID可以直接在脚本中通过美元符引用。这里有一个常见的陷阱当字符串中出现 $ 符号时shell 会误以为是在引用变量。例如想输出 “The cost is $15”脚本会尝试显示一个名为 $1 的变量再跟一个 5。解决方法是使用反斜线对美元符进行转义\$15。3.2 用户自定义变量用户可以自己定义变量来存储临时数据。变量名由字母、数字、下划线组成长度不超过 20 个字符且区分大小写。赋值时等号两边不能有空格如 guestTom。引用时同样在变量名前加 $。值得一提的是变量的值是可以随时修改的甚至可以用一个变量去赋值另一个变量这为脚本中的数据处理提供了很大的灵活性。3.3 命令替换这是 shell 脚本最有用的特性之一 —— 将命令的输出结果赋给变量。有两种语法形式反引号和 $() 格式。例如用 today$(date %y%m%d) 获取当前日期并拼接到文件名中可以生成带时间戳的日志文件避免文件被覆盖。四、输入输出重定向重定向的核心是改变数据的流向让命令从文件读取数据或将输出写入文件。4.1 输出重定向将命令输出写入文件若文件已存在则覆盖。将输出追加到文件末尾保留原有内容。这在记录日志或保存命令结果时非常实用。4.2 输入重定向将文件内容作为命令的输入。例如 wc filename 会统计文件的行数、词数和字节数。内联输入重定向直接在命令行中指定输入数据而不是从文件读取。使用时需指定一个文本标记来标识数据的开始和结束标记可以任意字符串但首尾必须一致。五、管道管道|解决了将一个命令的输出直接传给另一个命令作为输入的问题。相比于先用重定向保存到文件再用另一个命令读取管道更加简洁高效且无需中间文件。最典型的应用场景是配合 more 分页查看大量输出或配合 grep 筛选特定内容。管道可以串联任意多个命令形成一个处理链条让数据在命令间流动。六、数学运算Bash 本身对数学运算的支持有限主要有三种方式6.1 expr 命令expr 是一个用于执行算术和字符串操作的老牌命令。但使用时有几个不便之处操作符和操作数之间必须用空格隔开且部分特殊字符如 *需要转义否则会被 shell 误解。6.2 方括号 —— 推荐方式$[operation] 语法更加直观和易用例如 $[1 5] 或 $[$var1 * 2]。这种方式清晰明了是日常脚本中最常用的整数运算方法。但这两种方式都只支持整数运算遇到除法时会直接截断 小数部分。6.3 bc 计算器 —— 浮点运算当需要处理浮点数时就必须借助 bc 这一强大的计算器工具。bc 实际上是一种完整的编程语言支持变量、数组、函数甚至条件语句。在脚本中使用 bc 的典型格式是 variable$(echo options; expression | bc)其中 options 可以设置 scale 变量来控制小数位数默认为 0。对于较复杂的表达式还可以使用 内联输入将多行表达式传递给 bc。需要留意的是bc 中定义的变量在退出后会消失因此需要在同一个 bc 会话中完成所有相关计算。七、退出脚本 —— 退出状态码每个命令执行完毕后都会返回一个 0~255 的整数值作为退出状态码用于告知 shell 执行结果。其中 0 表示成功其他值表示不同类型的错误。特殊变量 $? 保存着上一个命令的退出状态码。脚本默认以最后一个命令的退出状态码作为自己的退出状态。我们可以用 exit 命令在脚本中主动指定退出码例如 exit 5。常见的退出状态码含义包括1 表示一般性未知错误126 表示命令不可执行127 表示命令未找到130 表示被 CtrlC 终止等。合理地设置退出状态码有助于调用脚本的上层程序判断执行结果。八、总结本次课程构建了 Shell 脚本编程的基本框架。从最基础的分号串联命令到编写独立的脚本文件从变量的定义与引用到输入输出重定向和管道再到数学运算和退出状态码的管理 —— 这些知识点共同构成了编写实用 Shell 脚本的基石。理解这些概念后我们已经能够写出具有一定功能的自动化脚本例如带提示信息的用户管理脚本、带时间戳的日志备份脚本等。后续的学习将在这些基础上进一步深入流程控制、函数定义等高级话题。
返回列表