我有一个这样的脚本:
#!/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没有识别出双数字编号,只取前导数字。那么,我怎样才能实现我的最初目的呢?
BTW,这是bash的一些版本信息:
bash --version GNU bash, version 4.1.2(1)-release
(x86_64-redhat-linux-gnu)
答案 0 :(得分:4)
使用-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
答案 1 :(得分:3)
您可以使用arithmetic expression代替条件表达式。
let sleepCount=0
while (( $sleepCount < 15 )); do
let sleepCount++
sleep 1
echo $sleepCount
done
答案 2 :(得分:1)
你的问题已经(好)回答了。我只是补充一点,在你的情况下你可以从C风格的循环中受益:
#!/bin/bash
for((sleepcount=1;sleepcount<=15;++sleepcount)); do
sleep 1
echo "$sleepcount"
done