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