脚本只进入最里面的while循环一次

时间:2015-01-26 00:29:33

标签: bash shell while-loop

我有这个脚本,我正在使用获取一组链接的状态代码。在找到具有状态代码206的第一个链接后,它将输出内容并终止。

我的问题是最里面的while循环永远不会触发第二次。一旦最内层循环执行其第一组迭代,中间while循环将执行其所有迭代然后终止。我留下了一些echo语句来帮助调试,我用虚拟URL交换了实际的URL。

current_url=http://example.com
# $(date +%Y%m%d)

chr() {
  [ "$1" -lt 256 ] || return 1
  printf "\\$(printf '%03o' "$1")"
  return 
}

i=122
j=122
k=122
lower_bound=47

while [  $i -gt $lower_bound ]; do
    first=$(chr $i)

    while [  $j -gt $lower_bound ]; do
        second=$(chr $j)

        while [  $k -gt $lower_bound ]; do
            third=$(chr $k)

            status=$(curl -so /dev/null -w "%{http_code}" $current_url)
            echo Status: $status Hash:$first$second$third
            if [[ "$status" == "206" ]]
            then
                curl -O $current_url
                exit
            fi

            if [[ $k == 97 ]]
            then
                k=91
            elif [[ $k == 65 ]]
            then
                k=58
            fi
            let k=k-1 
        done

        echo $j
        if [[ $j == 97 ]]
        then
            j=91
        elif [[ $j == 65 ]]
        then
            j=58
        fi
        let j=j-1 
    done

    echo $i
    if [[ $i == 97 ]]
    then
        i=91
    elif [[ $i == 65 ]]
    then
        i=58
    fi
    let i=i-1 
done

将一些示例输出到文件中:

Status: 200 Hash:zzz #innermost loop
Status: 200 Hash:zzy
Status: 200 Hash:zzx
...
Status: 200 Hash:zz2
Status: 200 Hash:zz1
Status: 200 Hash:zz0 #innermost loop runs to end
122
121 #middle loop continues without returning to innermost loop
120
...
50
49
48 #middle loop executes to end
122
121 #outer loop executes without returning to middle loop
120
...
50
49
48 #outer loop executes to end and script terminates

1 个答案:

答案 0 :(得分:0)

jk从不重置为初始值。这样做之后,循环问题就解决了。

来自@ etan-reisner的信用证在评论中指出了这一点。如果他发表评论作为答案,我会接受。