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

Script only enters the innermost while loop once

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

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

交换了实际的 URL
current_url=http://example.com
# $(date +%Y%m%d)

chr() {
  [ "" -lt 256 ] || return 1
  printf "\$(printf '%03o' "")"
  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

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

感谢@etan-reisner 在评论中指出了这一点。如果他 post 他的评论作为答案,我会接受它。