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
Run Code Online (Sandbox Code Playgroud)
您的 shell 脚本有一些问题。首先,你应该$c
在 while 中引用(所有这些 - 你错过了最后一个)。否则,当 $c 为空时(例如,在程序开始时), -z 测试不会传递任何内容而不是空字符串,并给出错误(类似于“期望参数”的内容)。
其次,您需要*
在expr
命令中转义。否则它会尝试做一个 glob(匹配文件名),就像cat *
会做的那样。最简单的就是逃避它\*
。错误将取决于 * 恰好扩展到什么(即,当前目录中的文件),但可能会令人困惑!
这至少应该让你的脚本运行。
PS:还有很多方法可以改进,您可能需要查看ShellCheck以获取一些(自动)建议。