IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Shell脚本

共 8 篇相关文章

IT 累计浏览 3,309

详解Linux bash中的变量

这篇详细拆解了Linux bash中的五种核心变量类型:本地变量、局部变量、环境变量、位置变量和特殊变量。作者从实际的运维与脚本编写场景出发,不仅区分了每种变量作用域的差异——例如本地变量作用于整个bash进程,而局部变量(通过local定义)仅限于当前代码段——还深入讲解了它们具体的用法与约束。 文章特别强调了环境变量如何通过`export`传递给子进程,以及位置变量($1, $2...)和`shift`命令在参数处理中的配合使用。对于日常脚本编写至关重要的特殊变量,如`$?`(上一条命令的返回值)、`$#`(参数个数)和`$*`与`$@`的区别,也都有清晰的示例说明。这些细节对比,能帮助你准确选择和使用不同变量,避免脚本中出现作用域混淆或参数传递错误的问题。

IT 累计浏览 8,186

Linux shell脚本使用while循环执行ssh的注意事项

当用while循环结合ssh批量处理服务器时,很多人会遇到脚本在首个任务后意外终止的诡异问题。这篇文章就针对这个经典“坑”,做了一次透彻的拆解。 问题现象很明确:一个用于批量获取服务器运行时间的脚本,在循环中调用ssh命令后,只处理了第一个IP就退出了。作者分析了根因——while循环通过重定向读取IP列表文件,但ssh命令会“吃掉”这个输入缓冲区,导致循环体内部的read命令无数据可读,循环因此提前结束。 解决这个坑提供了两种清晰的思路。一种是“换条路走”,直接将while循环改为for循环,因为for循环是逐词解析命令输出,不会预加载整个文件,从而避免了输入流被ssh截获。另一种是“原路修复”,在ssh命令后加上-n参数,该参数会明确禁止ssh从标准输入读取数据(等同于将输入重定向到/dev/null),从而“归还”了被占用的输入流,让while循环能正常推进。文章给出了具体的代码示例,是一个非常实用的填坑指南。

IT 累计浏览 3,412

Linux上的Shebang符号(#!)

这篇讲的是Linux和Unix系统里那个常见的符号“#!”。作者从它的名字“Shebang”说起,解释了这个名称其实来源于“SHArp”(#)和“bang”(!)的组合,还提到了Unix之父丹尼斯·里奇本人对命名的回忆,为这个技术细节增添了历史趣味。 文章的重点在于阐述这个符号的实际用途:它是脚本第一行的解释器指令,告诉系统该用哪个程序来执行这个文件。作者清晰地列出了几种常见情况:比如没有#!行时默认使用当前Shell;如果指定的解释器路径不存在或没有执行权限,系统会报出具体的错误信息;值得注意的是,#!后面必须写绝对路径,它不会去$PATH里自动查找。这些细节对于脚本编写和调试很有帮助。 最后,文章通过一个简单的“hello world”脚本示例,演示了从编写#!行、赋予执行权限到直接运行的完整过程,让抽象的概念变得具体可操作。对于刚接触Shell脚本或偶尔使用但想弄明白原理的开发者来说,这是一篇不错的速查小指南。

IT 累计浏览 5,998

Bash如何取得当前正在执行的脚本的绝对路径?

这篇讲的是Shell脚本中一个看似简单却容易掉坑里的问题:如何可靠地获取当前执行脚本的绝对路径。 作者从实际开发中经常需要使用脚本自身路径的场景出发,重点澄清了两种广为流传但并不正确的“常见误区”。一个是直接使用 `pwd` 命令,它只能获取当前的工作目录,与脚本所在位置无关;另一个是过度依赖特殊变量 `$0`,它的值会随 bash 的调用方式而变化,不一定就是脚本的绝对路径。 文章的核心价值在于对比和辨析。它详细解释了为什么这些方法会失效,并给出了一个经过验证的正确解决方案:`basepath=$(cd \`dirname $0\`; pwd)`。这个方案通过组合 `dirname` 和 `cd` 再加上 `pwd`,巧妙地规避了 `$0` 可能不完整的问题,确保无论从哪个目录调用脚本,都能稳定地返回脚本自身所在的绝对路径。对于编写需要灵活部署、不依赖用户预配置的工具脚本来说,这个技巧非常实用。

IT 累计浏览 5,917

较安全的rm脚本

这篇讲的是作者针对Linux系统中误删文件这一常见痛点,分享了一个经过安全强化的rm脚本。在默认环境下,rm命令直接删除文件且没有回收站机制,用户一旦误操作就可能面临数据永久丢失的窘境,这在运维和开发工作中尤其令人

IT 累计浏览 4,075

xargs 用法点滴

作者从xargs的典型使用场景出发,聚焦于一个容易被忽略的细节:当使用`find -print0`等命令生成参数列表时,如果将这些输出参数直接写在目标命令的结尾(即`command {}`),与将它们通过标准输入传递给`xargs`(即`command`后接空参数,`xargs`负责补全)在处理空格、换行符以及特殊字符时,行为有何本质区别。文章通过对比实验,清晰地展示了前一种写法可能因参数包含空格而导致命令被意外拆分执行的潜在风险,而后一种由`xargs`显式接管的写法则能更安全、可控地处理这类复杂输入。这篇分享旨在帮助开发者深化对xargs工作流的理解,写出更健壮、不易出错的命令行脚本。

IT 累计浏览 4,395

sed命令使用

如何高效地替换文本内容?作者从一份包含“学校-城市”缩写的文件出发,演示了用 sed 命令批量替换时的四种典型写法:单命令多替换、-e 选项分列、多行命令以及外部 sed 脚本。文章通过同一个需求——把 BJ 替换成 Beijing,SH 替换成 Shanghai 等——展示了这些方法最终都能得到一致的结果,核心区别在于编写方式和可维护性。 在最后,作者还引出了一个更具体的需求:只显示被替换的行。这时 -n 和 p 标志就派上了用场,它能让 sed 仅输出发生替换的行,从而精准过滤结果。整篇文章用实操案例串联了 sed 替换功能的多种写法,对日常文本处理和日志筛选都很有参考价值。

IT 累计浏览 3,602

后台脚本挂起的几种原因

这篇讲的是后台脚本执行到一半突然卡住的“幽灵”问题。作者从实际运维中常见的crontab定时任务监控难题出发,指出脚本挂起是其中最棘手的情况之一。 文章分析认为,这类问题多半不是系统层面的故障,而根源在于脚本本身的“体质”不够强壮——可能是代码逻辑存在漏洞、对异常情况缺乏处理,或是资源竞争考虑不周。当脚本在无人值守的后台静默失败时,会导致依赖其产出的任务链断裂,或服务器资源被无声占用。 作者没有停留在现象描述,而是引导读者去审视自己脚本的编写健壮性,比如是否加入了超时控制、完善的错误捕获与日志记录,以及能否在挂起后安全重启。对于需要守护关键定时任务的技术人员来说,这提供了一个具体的自查方向:与其在复杂的监控体系上投入,不如先回头加固脚本本身的防御性编程。