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

标签 linux bash shell scripting ksh

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

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

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

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

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

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

这是怎么回事?

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

我想在通过该行后得到 VAR1..N = 1

谢谢。

最佳答案

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

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

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

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

关于linux - Shell 脚本 - 如何根据输入模拟某些结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31212053/

相关文章:

linux - 在传递文件内容时了解 awk 命令的用法

linux - 在命令中传递单词

linux - 在 bash 中转义引号(嵌入式 awk)

linux - git:编辑文件导致使用 git diff 时出现 ^M

bash - 在 Bash 中交替合并两个文件的内容

macos - 从 sudo 提升的脚本以标准用户身份运行命令

android - ADB shell 命令在一行/bash 脚本上?

linux - 在 bash 中使用命令行实用程序解析变体数组

java - 从 Java 程序向标准输出添加日期戳

bash - 在 shell 中用逗号替换新行