在 Linux 中编写一个可以接收参数的脚本非常简单,主要通过 位置参数(Positional Parameters) 来实现。下面我将详细介绍如何编写和使用带参数的 Shell 脚本。


一、位置参数说明

当你运行一个脚本时,例如:

./script.sh arg1 arg2 arg3

Shell 会自动将参数赋值给特殊变量:

变量

含义

$0

脚本名称(如 script.sh

$1$2$3...

第1个、第2个、第3个参数

$#

传递的参数个数

$@

所有参数的列表("Linux Shell传递参数_shell2" ...)

$*

所有参数的列表(作为一个字符串)

$$

当前脚本的进程 ID

$?

上一条命令的退出状态


二、编写一个带参数的脚本示例

示例 1:简单参数输出

创建文件 hello.sh

#!/bin/bash

echo "脚本名称: $0"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "参数总数: $#"
echo "所有参数: $@"

赋予执行权限:

chmod +x hello.sh

运行:

./hello.sh 张三 25

输出:

脚本名称: ./hello.sh
第一个参数: 张三
第二个参数: 25
参数总数: 2
所有参数: 张三 25

示例 2:带参数校验的脚本

#!/bin/bash

# 检查是否传入了至少一个参数
if [ $# -lt 1 ]; then
    echo "用法: $0 <用户名> [年龄]"
    exit 1
fi

name=$1
age=${2:-"未知"}  # 如果没有第二个参数,默认为"未知"

echo "你好,$name!你的年龄是:$age"

运行:

./greet.sh 李四 30
# 输出:你好,李四!你的年龄是:30

./greet.sh 王五
# 输出:你好,王五!你的年龄是:未知

三、小技巧

1.引号保护参数中的空格:

./script.sh "北京 上海" "广州 深圳"

这样 $1"北京 上海",而不是只取“北京”。

2.遍历所有参数:

for arg in "$@"; do
    echo "参数: $arg"
done

四、总结

  • 使用 $1$2, ... 获取参数
  • 使用 $# 判断参数个数
  • 使用 $@ 遍历所有参数
  • 记得加 #!/bin/bash 和执行权限