$@和$?在shell脚本中什么意思

看shell脚本的时候,发现两个奇怪的用法 $@$?

sh run_task.python $@ 
RETURN_VALUE=$?
if [ ${RETURN_VALUE} -ne 0 ]; then
    echo "xx.sh job error!"
    exit 1
fi

1. 来看 $@

$@ 是一个特殊的 shell 变量,在 shell 脚本中用来表示所有传递给脚本的命令行参数。当在一个脚本中使用 $@,它会展开成调用该脚本时传递的所有参数,每个参数作为独立的字符串。

例如,假设有一个名为 wrapper_script.sh 的脚本,内容如下:

#!/bin/bash
# wrapper_script.sh

# 调用另一个脚本,并将所有传递给本脚本的参数传递给那个脚本
sh run_task.python $@

如果运行这个 wrapper_script.sh 并传递一些参数:

./wrapper_script.sh arg1 arg2 arg3

那么 wrapper_script.sh 会执行 run_task.python 脚本,并将 arg1arg2arg3 作为参数传递给它,就像你直接运行了以下命令:

sh run_task.python arg1 arg2 arg3

$@ 确保了所有传递给 wrapper_script.sh 的参数都被原封不动地传递给 run_task.python 脚本。

在编写需要传递参数的脚本时,$@ 是非常有用的,因为它允许脚本灵活地处理任意数量的参数,并将这些参数传递给其他命令或脚本。

2. 来看 $?

$? 是一个特殊的变量,代表上一个命令执行的退出状态码(exit status)。退出状态码是一个数字,通常用于表示命令执行的成功与否。按照惯例:

如果 $? 返回 0,表示上一个命令执行成功。

如果 $? 返回非 0 值,表示上一个命令执行失败或遇到错误。具体的非零值可以提供关于错误类型的额外信息。

在最上面的脚本中

RETURN_VALUE=$?

这行代码将上一个命令的退出状态码赋值给变量 RETURN_VALUE。这样,你就可以在后续的脚本中使用这个变量来检查之前的命令是否执行成功,或者根据退出状态码来执行不同的操作。

看个例子:

#!/bin/bash

# 尝试复制一个文件
cp source.txt destination.txt

# 捕获退出状态码
RETURN_VALUE=$?

# 根据退出状态码判断命令是否执行成功
if [ $RETURN_VALUE -eq 0 ]; then
    echo "File copied successfully."
else
    echo "Error occurred while copying the file."
fi

在这个脚本中,cp 命令用于复制文件。如果复制成功,$? 将返回 0,否则返回非 0 值。然后,脚本使用 RETURN_VALUE 变量来存储这个退出状态码,并根据其值输出相应的消息。

相关推荐

  1. $@$?shell脚本什么意思

    2024-07-17 01:22:02       22 阅读
  2. 编程,方法函数都是什么意思

    2024-07-17 01:22:02       30 阅读
  3. 如何Python执行Shell脚本

    2024-07-17 01:22:02       50 阅读
  4. Dockerfile 怎么shell脚本启动

    2024-07-17 01:22:02       26 阅读
  5. 什么shell脚本

    2024-07-17 01:22:02       20 阅读
  6. OpenAI API 的 system、user assistant 什么意思

    2024-07-17 01:22:02       49 阅读
  7. 统计的oraclepopulation什么意思

    2024-07-17 01:22:02       28 阅读
  8. sql的lag()lead()是什么意思

    2024-07-17 01:22:02       33 阅读
  9. *args**kwargs这个python意思

    2024-07-17 01:22:02       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 01:22:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 01:22:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 01:22:02       58 阅读
  4. Python语言-面向对象

    2024-07-17 01:22:02       69 阅读

热门阅读

  1. 前端面试题日常练-day92 【Less】

    2024-07-17 01:22:02       21 阅读
  2. Map和Set的迭代器原理

    2024-07-17 01:22:02       20 阅读
  3. tomcat为什么要自定义类加载器?

    2024-07-17 01:22:02       21 阅读
  4. Web 安全之 VAPT (漏洞评估与渗透测试)详解

    2024-07-17 01:22:02       21 阅读
  5. VScode编译c++代码json配置

    2024-07-17 01:22:02       24 阅读
  6. 【DRAM存储器三十四】LPDDR4介绍--MR和IO结构

    2024-07-17 01:22:02       18 阅读
  7. AI发展中的伦理挑战与应对策略

    2024-07-17 01:22:02       24 阅读
  8. 2024睿抗机器人开发者大赛CAIP编程赛题解(c++)

    2024-07-17 01:22:02       25 阅读
  9. ardupilot 系统时间见解

    2024-07-17 01:22:02       17 阅读