Shell Scripting - 如何根据输入模拟一些结果?

时间:2015-07-03 17:46:13

标签: linux bash shell scripting ksh

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

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

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

所以只是为了测试purpouses我添加了一行:

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

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

这有什么问题?

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

我希望在传递该行之后拥有VAR1..N = 1

感谢。

3 个答案:

答案 0 :(得分:2)

问题是[是一个命令,但[!不是。编写代码可能更简洁:

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

变量作业之间不需要分号,但它们不会受到伤害。

这是sh的瑕疵之一。出于某种原因,人们认为使用符号[作为命令并将其作为参数传递给]是个好主意,试图模仿语言中的大括号。不幸的是,这导致了大量的混淆,类似于这个问题所证明的。最好完全避免[并始终拼写test。这两个在功能上是相同的(除了[命令必须具有]作为最终参数),并且使用test更加清晰。 (您希望test!能够发挥作用吗?或者您是否认识到它需要写成! test?)

答案 1 :(得分:1)

在" Y"之间需要一个空格。和]。非零测试毫无意义,但也需要[和。。

之间的空格
[ "$1" == "Y" ] && { echo "Debugging is ACTIVE" ; VAR1=1 ; ... ; VAR2=1 ; }

你也考虑过把它写成if ... fi块吗?

答案 2 :(得分:0)

bash提供了一种为不以其他方式设置的参数提供默认值的方法。据推测,您的代码有像

这样的行
VAR1=$1
VAR2=$2
VAR3=$3

替换它们
VAR1=${1-1}
VAR2=${2-1}
VAR3=${3-1}

例如,如果$1未设置,则会为VAR1分配值1而不是$1的值。