在bash while循环内如何做算术?

时间:2018-10-07 18:00:02

标签: bash

我正在启动脚本,并且知道while循环的语法不正确,但是我很好奇是否有任何方法可以在bash中执行这种条件语句吗?

#Network Bandwidth Utilization

line=$(ifstat | head -n 7)
echo $line

interface=$(echo line | cut -f 1 -d ' ')
RXPktsRate=$(echo line | cut -f 2 -d ' ')
TXPktsRate=$(echo line | cut -f 3 -d ' ')
RXDataRate=$(echo line | cut -f 4 -d ' ')
TXDataRate=$(echo line | cut -f 5 -d ' ')

echo $interface $RXPktsRate $TXDataRate

while [ (( $SECONDS % 5 )) == 0 ] && [ $SECONDS <= 900 ];do
    echo hi
done

2 个答案:

答案 0 :(得分:4)

对于使用bash进行算术测试,您通常不希望使用[测试内置函数,而是依靠双括号内更复杂的算术评估,即

while ((SECONDS % 5 == 0 && SECONDS <= 900)); do
    echo hi
done

SECONDS % 5 == 0也可以写为!(SECONDS % 5),就像在双括号中一样,类似于C中,零值的取值为“ false”,而任何非零整数值的取值为“ true”

请注意,变量不需要在双括号内以美元符号为前缀。

还请注意,bash中仅内置整数运算。如果您想进行浮点运算,您仍然可以借助其他一些脚本工具(例如bc计算器语言)来实现。

答案 1 :(得分:0)

好吧,您的脚本几乎是正确的。您可以通过使用以下格式$((expr))放置整数表达式来执行算术运算,例如echo $(( 5 % 3 ))输出2。

代替<=操作数,可以使用-le(le代表Less或Equal),它的作用相同,并且无需任何额外的魔法即可工作。

while [ $(( $SECONDS % 5 )) == 0 ] && [ $SECONDS -le 900 ];do
    echo hi
done