Bash脚本第二个if语句判断失效问题排查求助
问题定位
- 数组初始化逻辑错误
你声明数组后用arr+=(0)循环追加元素,而非给1~n索引位赋值,导致${arr[$i]}取值为空,永远不等于0,第二个if条件无法触发。 - 关键字拼写错误
循环末尾的fidone属于语法错误,需拆分为独立的fi和done关键字,否则Bash无法正确解析分支和循环边界。 - 数组赋值语法错误
${arr[$i]}+=${arr[$i]}写法完全错误,无法实现标记已访问的逻辑,正确的数组赋值写法为arr[$i]=1。
修正后可正常运行的代码
n=20 x=3 count=0 flag=0 i=1 declare -a arr # 正确初始化数组,1~n位初始值为0 for (( j=1;j<=n;j++ )) do arr[$j]=0 done while [[ $count -ne $n ]] do if [[ $i -le $n ]] then if [[ ${arr[$i]} -eq 0 ]] then arr[$i]=1 echo -n " $i" count=$(( count+1 )) i=$(( i+1+x )) else i=$(( i+1 )) fi else i=$(( i-n )) flag=$(( flag+1 )) fi done echo " " echo "No of round : $flag"
运行后输出为:1 5 9 13 17 2 6 10 14 18 3 7 11 15 19 4 8 12 16 20
完全符合预期要求。
内容的提问来源于stack exchange,提问作者Virat
相关产品推荐
相关产品推荐

