Bash 脚本参数(Arguments)完全指南:用 $1、$2、$@ 与 $0 构建可复用脚本
2026/9/17 9:56:21 网站建设 项目流程

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 s'auto-détruire." rm -f $0

运行后,脚本会先输出类似Le nom du fichier est: ./self-destruct.sh et il va s'auto-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检查(排除SC2034SC2154SC2145等教学片段特有的告警,如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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询