我正在启动脚本,并且知道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
答案 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