bash 脚本中的 while 循环

bash 脚本中的 while 循环

我的代码是:

#!/bin/bash

while true; do

    COUNTER=$((COUNTER +1))     
    echo $COUNTER

    if (($COUNTER%3 == 0));  then
        echo "Counter now is 3"
        sleep 2
    fi

    if (($COUNTER%6 == 0));  then
        echo "Counter now is 6"
        sleep 2
    fi

    if (($COUNTER%9 == 0));  then
        echo "Counter now is 9"
        sleep 2
    fi

    if (($COUNTER%12 == 0));  then
        echo "Counter now is 12"
        sleep 2
    fi

    if (($COUNTER%15 == 0));  then
        echo "Counter now is 15"
        sleep 2
        exit
    fi

done

我的输出是:

./test2.sh 
1
2
3
Counter now is 3
4
5
6
Counter now is 3
Counter now is 6
7
8
9
Counter now is 3
Counter now is 9
10
11
12
Counter now is 3
Counter now is 6
Counter now is 12
13
14
15
Counter now is 3
Counter now is 15

为什么它每次都会显示,Counter now is 3或者有时会在 上显示更多echo。我不想让它显示额外的内容echo

答案1

如果您的输出说明了相应测试的测试内容,那么会更正确,例如

if (( COUNTER%3 == 0 )); then
    echo 'COUNTER is a multiple of 3'
fi

这是你的测试,如果你仔细想想,6、9、12 和 15 也是 3 的倍数。

在这个简短的脚本中,如果您想检查计数器的实际值而不是它是否是某个值的倍数,我建议您直接测试 onCOUNTER而不是 on :COUNTER%somevalue

if (( COUNTER == 3 )); then
    echo 'COUNTER is 3'
fi

请注意,$当变量在算术上下文中使用时,不需要变量。

答案2

因为输出是一个谎言。

  • 当它说“count is…”时,输出是什么?
  • 还有什么比“Count is”更好的文字呢?
  • 哪里echo算数呢? (让它echo算数是……)

当你解决这个问题后,你应该明白它在做什么。

相关内容