bash没有识别双位数字

时间:2014-10-14 04:30:18

标签: linux bash shell

我有一个这样的脚本:

#!/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)

3 个答案:

答案 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