脚本只进入一次最里面的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
j
和 k
永远不会重置为初始值。这样做之后,循环问题就解决了。
感谢@etan-reisner 在评论中指出了这一点。如果他 post 他的评论作为答案,我会接受它。
我有这个脚本,我正在使用它来获取一组 link 的状态代码。找到状态码为206的第一个link,输出内容并终止。
我的问题是最里面的 while
循环永远不会触发第二次。一旦最内层的循环完成了它的第一组迭代,中间的 while
循环将执行它的所有迭代然后终止。我留下了一些 echo
语句来帮助调试,我用一个虚拟的 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
j
和 k
永远不会重置为初始值。这样做之后,循环问题就解决了。
感谢@etan-reisner 在评论中指出了这一点。如果他 post 他的评论作为答案,我会接受它。