Shell 脚本 - 如何根据输入模拟某些结果?

Shell Scripting - How to mock some results based on an input?

我有一个小脚本可以验证数据库服务器上的某些条件。我想模拟所有这些条件下的失败以测试脚本,所以我添加了以下行:

./print_results ${VAR1} ${VAR2} ... ${VARN}

如果任何变量的值不同于零,因为它失败了。

所以只是为了测试目的,我添加了以下行:

VAR1=1 ; VAR2=1 ; ... ; VARN=1

但是我每次要用假的结果替换真实的结果时都需要编辑文件。

这有什么问题?

[! -z  ] && [ "" == "Y"] && { echo "Debugging is ACTIVE" ; VAR1=1 ; ... ; VAR2=1 ; }

我想在通过那条线后得到VAR1..N = 1

谢谢。

在 "Y" 和 ] 之间需要一个 space。非零测试是没有意义的,但在 [ 和 !.

之间还需要一个 space
[ "" == "Y" ] && { echo "Debugging is ACTIVE" ; VAR1=1 ; ... ; VAR2=1 ; }

您是否考虑过将其写成 if...fi 块?

问题是[是命令,而[!不是。编写代码可能更清晰:

test "{}" == Y && { echo "Debugging is ACTIVE"; VAR1=1 VAR2=1 ...; }

变量赋值之间不需要分号,但它们不会造成伤害。

这是 sh 的缺点之一。出于某种原因,人们认为使用符号 [ 作为命令并将其作为参数传递 ] 是一个好主意,试图模仿语言中的大括号。不幸的是,这会导致很多混淆,类似于这个问题中所展示的那样。最好完全避免 [ 并始终将其拼写为 test。这两个在功能上是相同的(除了 [ 命令必须有 ] 作为最后一个参数),并且使用 test 更简洁。 (您希望 test! 有效吗?还是您认为它需要写成 ! test?)

bash 提供了一种为未设置的参数提供默认值的方法。据推测,您的代码有类似

的行
VAR1=
VAR2=
VAR3=

将它们替换为

VAR1=${1-1}
VAR2=${2-1}
VAR3=${3-1}

如果 </code> 未设置,例如,<code>VAR1 将被分配值 1 而不是 的值。