我有这样的脚本:
#!/bin/bash let sleepCount=0 while [[ $sleepCount < 15 ]]; do let sleepCount++ sleep 1 echo $sleepCount done
我期望它给出1到15的序列。然而,它给出1和2后退出。我改变了15到5,然后我得到了1到5.所以,看起来bash不认识到两位数字和只是取得领先的数字。 那么,我怎样才能达到我最初的目的呢?
顺便说一句,这是bash的一些版本信息:
bash --version GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
使用-lt
而不是<
#!/bin/bash let sleepCount=0 while [[ $sleepCount -lt 15 ]]; do let sleepCount++ sleep 1 echo $sleepCount done
lt
检查$sleepCount
是否小于 15
编辑:
<
执行字符串比较。 要清楚地考虑下面的命令
$[[ 0 < 15 ]] $ echo $? 0 $ [[ 1 < 15 ]] $ echo $? 0 $ [[ 2 < 15 ]] $ echo $? 1 $ [[ 3 < 15 ]] $ echo $? 1 $ [[ 4 < 15 ]] $ echo $? 1 $ [[ 44 < 15 ]] $ echo $? 1 $ [[ 44 < 5 ]] $ echo $? 0 $ [[ "a" < "b" ]] $ echo $? 0 $ [[ "b" < "a" ]] $ echo $? 1
您可以使用算术表达式来代替条件表达式。
let sleepCount=0 while (( $sleepCount < 15 )); do let sleepCount++ sleep 1 echo $sleepCount done
你的问题已经被很好的回答了。 我只是补充一点,你可以从C风格的循环中获益:
#!/bin/bash for((sleepcount=1;sleepcount<=15;++sleepcount)); do sleep 1 echo "$sleepcount" done