主题
  • 默认模式
  • 浅蓝色模式
  • 淡绿色模式
  • 深夜模式

Shell 传递参数

在 Shell 编程中,我们可以通过特殊变量来获取命令行传递的参数。脚本内获取参数的格式为 $nn 代表一个数字。

例如,执行脚本时传递参数 ./script.sh arg1 arg2 arg3,在脚本中可以通过 $1 获取到 arg1$2 获取到 arg2,以此类推。

基本参数变量:

  • $0:脚本自身的名称
  • $1-$9:依次表示第1至第9个传入参数
  • ${10}-${n}:扩展表示第10个及之后的参数
  • $#:已传递的参数总数
  • $*:将所有参数合并为单个字符串
  • $@:将每个参数作为独立的字符串处理
  • $?:上一命令执行后的退出状态码
  • $$:当前 Shell 进程的 ID (PID)

Linux Shell 变量


Shell 使用实例

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

实例代码
复制
#!/bin/bash
# author:开创者教程
# url:www.kaicz.com

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

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

$ chmod +x example.sh
$ ./example.sh hello world 123
Shell 传递参数实例!
执行的文件名: ./example.sh
第一个参数为:hello
第二个参数为:world
第三个参数为: 123

✅ 检查参数是否存在

实例代码
复制
#!/bin/bash

if [ $# -eq 0 ]; then
    echo "错误:请提供参数"
    exit 1
fi

if [ -z "$1" ]; then
    echo "第一个参数为空"
fi

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

# 情况1:不提供任何参数场景
$ ./script.sh
错误:请提供参数

# 情况2:提供空字符串作为第一个参数场景
$ ./script.sh ""
第一个参数为空

# 情况3:提供非空参数场景
$ ./script.sh "hello"
# 没有输出,正常退出

# 情况4:提供多个参数场景
$ ./script.sh "hello" "world"
# 没有输出,正常退出

✅ 文件备份脚本

实例代码
复制
#!/bin/bash

if [ $# -lt 2 ]; then
    echo "用法: $0 源文件 目标目录 [备份前缀]"
    exit 1
fi

source_file=$1
target_dir=$2
backup_prefix=${3:-"backup"}

if [ ! -f "$source_file" ]; then
    echo "错误: 源文件不存在"
    exit 1
fi

if [ ! -d "$target_dir" ]; then
    echo "错误: 目标目录不存在"
    exit 1
fi

timestamp=$(date +%Y%m%d_%H%M%S)
backup_file="${target_dir}/${backup_prefix}_${timestamp}.tar.gz"

tar -czf "$backup_file" "$source_file"
echo "备份完成: $backup_file"


评论区 0
发表评论