我在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次迭代增加一次,但它在循环的每次迭代中都会增加。我做错了什么?
答案 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