我有这个脚本,我正在使用获取一组链接的状态代码。在找到具有状态代码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
答案 0 :(得分:0)
j
和k
从不重置为初始值。这样做之后,循环问题就解决了。
来自@ etan-reisner的信用证在评论中指出了这一点。如果他发表评论作为答案,我会接受。