条件声明未按预期工作

时间:2015-02-03 07:25:48

标签: linux shell conditional-statements konsole

我在kubuntu 14.04上使用Konsole。

我想接受这个shell脚本的参数,并将其传递给命令。代码基本上是一个无限循环,我希望内部命令的一个参数每循环3次迭代就增加一次。忽略实际细节,这是我的代码的要点:

#!/bin/bash
ct=0
begin=$1
while :
    do
        echo "give: $begin as argument to the command"
        #actual command
        ct=$((ct+1))
        if [ $ct%3==0 ]; then
            begin=$(($begin+1))
        fi
    done

我期望{3}变量每3次迭代增加一次,但它在循环的每次迭代中都会增加。我做错了什么?

2 个答案:

答案 0 :(得分:1)

您想要使用

进行测试
if [ $(expr $cr % 3) = 0 ]; then ...

因为这个

[ $ct%3==0 ]

测试参数替换后的字符串$ct%3==0是否为空。理解这一点的一个好方法是阅读test的手册,并在给出1,2,3或更多参数时查看语义。在您的原始脚本中,它只能看到一个参数,在我看来它是三个。白色空间在外壳中非常重要。 : - )

答案 1 :(得分:1)

在BASH中,您可以完全利用((...))并重构您的脚本:

#!/bin/bash

ct=0
begin="$1"
while :
do
   echo "give: $begin as argument to the command"
   #actual command
  (( ct++ % 3 == 0)) && (( begin++ ))
done