求助:Shell质数打印脚本存在语法问题,寻求修正指导
修正后的质数打印Shell脚本
先给你能正常运行的修正版脚本:
echo "enter range: " read n echo "prime no are:" m=2 while [ $m -le $n ]; do i=2 flag=0 while [ $i -le `expr $m / 2` ]; do if [ `expr $m % $i` -eq 0 ]; then flag=1 break fi i=`expr $i + 1` done if [ $flag -eq 0 ]; then echo $m fi m=`expr $m + 1` done
原脚本的主要语法错误说明
- 循环与条件语句的分隔符缺失:
while [ ... ]和if [ ... ]后面必须用分号;分隔后再写do/then,或者换行单独写do/then。比如原脚本里的while [ $m -le $n ] do是错误写法,必须添加分号调整格式。 expr命令的空格要求:expr的操作数和运算符之间必须有空格,原脚本里的expr $m/2要写成expr $m / 2,expr $i +1要写成expr $i + 1,否则expr会把连写的字符串当成整体,无法执行算术计算。- 变量赋值的空格问题:Shell中变量赋值时
=前后不能有空格,原脚本里的i=expr ...和m=expr ...会触发语法错误,必须去掉=后面的空格。 - 代码结构混乱:原脚本存在多余的
then语句,且done的位置错误,导致循环嵌套逻辑完全混乱,需要重新调整缩进和语句闭合位置。
内容的提问来源于stack exchange,提问作者Adarsh John Sebastian
相关产品推荐
相关产品推荐

