十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

Bash 脚本参数(Arguments)完全指南:用 $1、$2、$@ 与 $0 构建可复用脚本

Bash 脚本参数(Arguments)完全指南:用 $1、$2、$@ 与 $0 构建可复用脚本 Bash 脚本参数Arguments完全指南用 $1、$2、$ 与 $0 构建可复用脚本【免费下载链接】introduction-to-bash-scriptingFree Introduction to Bash Scripting eBook项目地址: https://gitcode.com/GitHub_Trending/in/introduction-to-bash-scripting本指南以开源电子书《Introduction to Bash Scripting》法语版的 Arguments Bash 章节 为骨架系统讲解 Bash 位置参数positional parameters的使用方法从$1、$2、$3逐个取参到用$一次性获取全部参数再到用$0引用脚本自身。读完本文你将能够编写接收命令行参数的可复用脚本为后续创建自定义 Bash 命令、交互式菜单等实战章节打下基础。一、什么是 Bash 参数运行一个 Bash 脚本时你可以在脚本名之后追加若干值这些值会被 Bash 自动传递给脚本内部称为位置参数positional arguments / positional parameters。传递方式非常简单只需把参数写在脚本名之后、以空格分隔即可。例如运行如下命令./mon-script.sh votre_argument脚本内部即可通过$1引用第一个被传入的参数。如果传入第二个参数就用$2访问第三个用$3依此类推。这种“按位置编号取参”的机制是 Bash 脚本接收外部输入最基础、最常用的方式之一。提示在 Bash 变量章节 中变量是在脚本内部赋值而参数则是脚本从外部命令行获得的输入两者互补。Bash 中不存在严格的数据类型参数同样可以容纳数字与字符串。二、第一个参数示例脚本arguments.sh我们创建一个名为arguments.sh的短小脚本作为示例它依次打印传入的前三个参数#!/bin/bash echo Le premier argument est $1 echo Le deuxième argument est $2 echo Le troisième argument est $3保存文件后先赋予它可执行权限chmod x arguments.sh然后运行脚本并传入3个参数./arguments.sh chien chat oiseau屏幕上将显示Le premier argument est chien Le deuxième argument est chat Le troisième argument est oiseau可以看到$1、$2、$3分别对应了命令行中依次排列的三个值与位置严格一一对应。几点实操注意事项参数之间以空格分隔如果某个参数本身包含空格需要用引号包裹例如./arguments.sh un chien。脚本内的echo使用了双引号这正是 变量章节 推荐的写法——双引号内允许变量展开同时避免空格导致的意外拆分。若传入的参数数量少于脚本引用的编号例如只传 1 个参数却引用$3未赋值的参数会被当作空字符串处理不会报错。三、用 $ 一次性获取全部参数当脚本需要处理数量不固定的参数时可以借助特殊变量$引用所有位置参数。将脚本改写为#!/bin/bash echo Tous les arguments : $再次运行./arguments.sh chien chat oiseau输出为Tous les arguments : chien chat oiseau$将每个参数视为独立单元适合在for循环中逐个遍历循环技巧可参考 Bash 循环章节。与之相似的还有$*它同样代表全部参数但将所有参数视为一个整体字符串。当参数中含空格时$与$*的行为差异明显建议优先使用$以保留每个参数的独立性。此外$#可用来统计传入参数的个数常用于脚本开头的参数校验例如#!/bin/bash if [ $# -lt 1 ]; then echo Usage: $0 argument exit 1 fi echo Vous avez passé $# argument(s) : $参数在 Bash 脚本实战中无处不在。例如电子书中后续的 多台远程服务器批量执行脚本章节英文原版对应 017-executing-bash-script-on-multiple-remote-server.md就是典型的“以脚本参数传入服务器列表/用户名”场景交互式菜单章节 也常配合参数实现非交互式调用。理解好位置参数是读懂这些实战脚本的前提。四、$0引用脚本自身的名称除了$1、$2这样的编号参数Bash 还提供了特殊变量$0它代表脚本自身的名称即命令行中脚本路径本身。$0最常见的用途是在脚本中打印/记录当前脚本的文件名便于日志输出与错误提示例如上文Usage: $0 argument根据脚本名动态决定行为多命令软链指向同一脚本时在某些特殊场景下对脚本文件自身进行操作。原文档给出一个“自毁脚本”的经典演示打印文件名后删除自身文件#!/bin/bash echo Le nom du fichier est: $0 et il va sauto-détruire. rm -f $0运行后脚本会先输出类似Le nom du fichier est: ./self-destruct.sh et il va sauto-détruire.的信息随后用rm -f删除脚本文件本身。⚠️ 安全警告文件自毁是不可逆的危险操作。动手前务必确保已备份该脚本文件否则脚本执行后源码将永久丢失。日常工作中更推荐把$0用于“获取脚本名”这一温和用途仅在确有需要时如临时脚本清理才使用自毁技巧。五、从仓库验证参数处理与脚本质量检查本仓库本身就是一个围绕 Bash 主题的开源电子书项目其配套工具链可以帮我们印证参数语法的正确用法。仓库中的 shellcheck-ebook.sh 是一段真实的 Bash 脚本它以位置参数接收目录路径#!/bin/bash set -euo pipefail EBOOK_DIR${1:-ebook/en/content} if [[ ! -d $EBOOK_DIR ]]; then echo Error: directory $EBOOK_DIR not found exit 1 fi这段脚本恰好综合运用了本篇文章的核心知识${1:-ebook/en/content}引用第一个位置参数$1并在未传入时给出默认值——这是“参数缺省默认值”的进阶写法脚本正文再以for md_file in $EBOOK_DIR/*.md遍历目录下的 Markdown 文件逐块提取 bash 代码并交给shellcheck -S warning检查排除SC2034、SC2154、SC2145等教学片段特有的告警如SC2145正是针对$与字符串混用的教学示例。也就是说你可以在本仓库的ebook/en/content目录下运行./scripts/shellcheck-ebook.sh脚本会自动提取英文版电子书中所有bash代码块并做静态检查——包括本文讨论的$1、$、$0示例。这为我们验证参数语法是否正确提供了一条可复现的自动化路径。六、参数速查表特殊变量含义典型用途$0脚本自身的名称打印脚本名、错误提示Usage: $0 ...$1~$9第 1 至第 9 个位置参数按位置访问单个参数$所有位置参数每个参数独立成单元遍历所有参数、原样转发给其他命令$*所有位置参数视为一个整体字符串需要合并输出时的替代方案$#位置参数的个数入口参数数量校验${1:-default}带默认值的参数引用参数可缺省时的稳健写法常用组合示例#!/bin/bash # 逐个访问 echo Script: $0 echo Premier: $1, Deuxième: $2 # 获取数量并遍历 echo Nombre de paramètres: $# for arg in $; do echo Argument: $arg done七、小结Bash 位置参数是脚本与外部世界交互的桥梁$1、$2、$3按位置取参$汇总全部参数$0引用脚本自身。掌握这些基础后你就能写出“一次编写、多次传参复用”的通用脚本为阅读本电子书后续的自定义 Bash 命令、交互式菜单与远程服务器批量执行等实战章节做好准备。动手把文中的arguments.sh亲自跑一遍再用$#、$、默认值语法改造它参数处理就会成为你的肌肉记忆。【免费下载链接】introduction-to-bash-scriptingFree Introduction to Bash Scripting eBook项目地址: https://gitcode.com/GitHub_Trending/in/introduction-to-bash-scripting创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表