나는 숫자의 큐브를 얻지 못한다

나는 숫자의 큐브를 얻지 못한다
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 *. 가장 쉬운 방법은 그것으로부터 도망치는 것입니다 \*. 결과 오류는 * 확장자의 정확한 내용(즉, 현재 디렉터리에 어떤 파일이 있는지)에 따라 다르지만 혼란스러울 수 있습니다!

최소한 스크립트가 실행되어야 합니다.

추신: 개선할 수 있는 방법은 다양합니다. 한 번 살펴보세요.주택 검사일부 (자동) 제안.

답변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

관련 정보