【Shell脚本4】Shell 传递参数

Shell 传递参数

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推......

以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名(包含文件路径):

bash 复制代码
#!/bin/bash

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

为脚本设置可执行权限,并执行脚本,输出结果如下所示:

bash 复制代码
$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3

另外,还有几个特殊字符用来处理参数:

bash 复制代码
#!/bin/bash

echo "Shell 传递参数实例!";
echo "第一个参数为:$1";

echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";

执行脚本,输出结果如下所示:

bash 复制代码
$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
第一个参数为:1
参数个数为:3
传递的参数作为一个字符串显示:1 2 3

\* 与 @ 区别:

  • \* :将所有命令行参数作为单个字符串返回。参数之间由变量 IFS(Internal Field Separator)中的第一个字符分隔(默认为空格)。例如,如果执行脚本 script.sh arg1 arg2 "arg3 with space",其中脚本内容为 echo " * ",那么将输出 arg1 arg2 arg3 with space。
  • @:将每个命令行参数作为独立的、可被引用的字符串返回。每个参数被视为独立的实体,不会合并为单个字符串。例如,如果执行脚本 script.sh arg1 arg2 "arg3 with space",其中脚本内容为 echo "@",那么将输出 arg1 arg2 arg3 with space。

下面是一个简单的示例来说明它们之间的区别:

bash 复制代码
#!/bin/bash

echo "Using \$*"
for arg in "$*"; do
  echo "$arg"
done

echo "Using \$@"
for arg in "$@"; do
  echo "$arg"
done

如果执行脚本 script.sh arg1 arg2 "arg3 with space",输出将会是:

bash 复制代码
Using $*
arg1 arg2 arg3 with space
Using $@
arg1
arg2
arg3 with space

从输出中可以看出,\* 将所有参数作为单个字符串进行处理,而 @ 将每个参数作为独立的字符串进行处理。因此,在处理带有空白字符的参数时,这两个变量的行为可能会有所不同。

相关推荐
时间售卖铺2 小时前
MySQL 安装部署
运维·数据库·mysql·云原生
亚川楼宇自控系统数据中心厂家2 小时前
消防风机一体化监控系统结合楼宇自控 协同管控原理科普
运维
邪修king2 小时前
Re:Linux系统篇(三十七):进程间通信Chapter4:System V 共享内存深度解析:为什么它是最快的 IPC?
android·linux·运维
桌管小李2 小时前
终端安全一体化实战:AI 审计、行为分析、零信任、防拍照与远程运维全解析
运维·服务器·网络·人工智能·windows·安全·macos
流星白龙3 小时前
【Docker】14.存储卷与管理卷Volume
运维·docker·容器
迪康Defender3 小时前
端点安全选型观察:一体化平台与传统 EDR 的场景差异
运维·经验分享·安全·自动化·学习方法·远程工作·安全架构
amcomputer3 小时前
Docker 常用命令总结:从安装到日常使用
运维·docker·容器
ZKNOW甄知科技3 小时前
燕千云迭代版本发布:智能Agent深入业务现场
运维·人工智能·低代码·机器学习·自然语言处理·自动化·aigc
张张123y3 小时前
2026 Agent 框架怎么选?拆 3 层底层逻辑(运行循环 / 记忆 / 工具协议)+ 一张决策表
linux·ubuntu·microsoft·langgraph·mcp·crewai·agent 框架