我没有得到数字的立方

我没有得到数字的立方
while [ "$c" = y -o "$c" = Y -o -z $c ]
do
  echo enter a number;
  read n;
    if [ $n -ge 0 -a $n -le 50 ];then
      echo "cube= `expr $n * $n * $n`";
    fi;
  echo y to continue  or any to exit;
  read c;
done

答案1

您的 shell 脚本存在一些问题。首先,你应该$c暂时引用(所有这些——你错过了最后一个)。否则,当 $c 为空时(例如,在程序开始时),-z 测试不会传递任何内容,而不是空字符串,从而给出错误(类似于“预期参数”的内容)。

其次,你需要逃避*你的expr命令。否则它会尝试执行 glob(匹配文件名),就像cat *会做的那样。最简单的就是逃避它\*。由此产生的错误将取决于 * 扩展的具体内容(即哪些文件位于当前目录中),但可能会令人困惑!

这至少应该让你的脚本运行。

PS:还有很多方法可以改进,你可能想看看外壳检查一些(自动)建议。

答案2

在 bash 中,你可以这样写:

PS3="Continue? "
while true; do

    read -p "Enter a number: " n
    ((0 <= n && n <= 50)) && echo "cube = $((n * n * n))"

    select ans in yes no; do
        case $ans in
            yes) break ;;
            no) break 2 ;;
        esac
    done
done

相关内容