数字のキューブが得られない

数字のキューブが得られない
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

関連情報