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