在这个 shell 脚本中,使用包含退出代码的布尔表达式的目的是什么?

在这个 shell 脚本中,使用包含退出代码的布尔表达式的目的是什么?

我有一个问题可以通过这个答案解决https://superuser.com/a/508761

现在我需要扩展它来做其他事情,但在修改它之前,我首先需要更好地了解它的工作原理。以下是相关脚本:

#!/bin/bash

(( $# != 2 )) && exit 1

for f in *; do
  newf="${f//$1/$2}"
  if [[ $f != $newf ]]; then
    mv "$f" "$newf"
  fi
done

(( $# != 2 )) && exit 1做什么?我在网上找不到解释:我知道每个组件是什么,但不知道整行代码在整个脚本中起什么作用。答案没有解释那一行。发帖人上次上网是 2 年前,我不想重提 5 年前的问题,所以我就来这里了。

答案1

它是一个控制运算符

打击人

控制运算符 && 和 || 分别表示 AND 列表和 OR 列表。
 AND 列表的形式为
command1 && command2
当且仅当 command1 返回退出状态零时,才会执行 command2。 [..切..] AND 和 OR 列表的返回状态是最后一个命令的退出状态 列表中执行。
A控制操作员
    执行控制功能的标记。它是以下符号之一:
        || & && ; ;; ()|
 

(致谢)

因此在这种情况下,不要将其读&&作布尔运算符。所以现在您知道何时exit 1执行 - 仅在前一个命令成功时(如果退出状态为零)。

看到这个服务器故障答案为了&&在 Bash 中的 3 种不同上下文中的解释。有助于学习它们之间的区别。

答案2

如果没有向脚本传递两个参数,它将在该行退出脚本。

  • $#是调用脚本时传入的参数数量,类似于argcC 语言

  • (( $# != 2 ))0如果参数数量不等于,则返回 truey 代码 (2

  • &&仅当左侧以 truey 代码退出时才运行右侧。这意味着如果参数数量不是 2,则运行右侧。

  • exit 1使用错误的退出代码退出脚本1。这会在此时中止脚本并通知调用者发生了错误。

相关内容