Shell编写快乐素数检测代码运行报错问题排查求助
Shell快乐数脚本错误排查与修正
存在的问题
- 变量赋值语法错误:Shell中变量赋值等号两侧不能有空格,
rem = $0这类写法会被系统识别为调用rem命令而非赋值,正确写法为rem=$0 - 函数参数取值错误:Shell函数的入参需要用
$1、$2... 这类变量获取,$0是当前脚本的文件名,无法拿到函数传入的参数 - 变量作用域问题:
happy函数中未初始化result变量就直接在循环条件中调用,会导致空值报错,需要先把函数接收的参数赋值给内部计算变量 - 函数返回值超限:Shell函数的
return只能返回0-255范围的整数,用来返回计算得到的平方和会出现溢出异常,应该用echo输出结果,调用时通过$()捕获输出值 - 条件判断语法错误:
if [ $?==1 ]写法不符合Shell规范,数值比较的等于运算符为-eq,且运算符两侧必须留空格 - 逻辑错误:
- 计算各位平方和时
sum初始值应该为0,不是传入的参数本身 - 快乐数判断的终止条件应为结果等于1(是快乐数)或等于4(不是快乐数),原代码写的终止条件包含0不符合规则
- 计算各位平方和时
修正后完整代码
#!/bin/bash happy(){ local num=$1 local sum=0 local rem=0 while [ $num -gt 0 ] do rem=$((num%10)) sum=$((sum + rem*rem)) num=$((num/10)) done echo $sum } # 若需要判断用户输入的单个数字,可删除下面的for循环,直接把result赋值为用户输入的num即可 echo "Enter a number" read num for (( i=1; i<101; i++ )) do result=$i while [ $result -ne 1 ] && [ $result -ne 4 ] do result=$(happy $result) done if [ $result -eq 1 ] then echo "$i 是快乐数" else echo "$i 不是快乐数" fi done
内容的提问来源于stack exchange,提问作者Nur
相关产品推荐
相关产品推荐

