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
シェルスクリプトに問題があります。まず、$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