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 而不是
的值。
我有一个小脚本可以验证数据库服务器上的某些条件。我想模拟所有这些条件下的失败以测试脚本,所以我添加了以下行:
./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 而不是 的值。