응답 1개, 사용 가능 2개라는 스크립트가 멈춤: 수학 관련

응답 1개, 사용 가능 2개라는 스크립트가 멈춤: 수학 관련

사용자 입력을 기반으로 방 2개의 면적을 사용자에게 알려주는 스크립트가 있습니다. 저는 이 부분이 맞는 것 같아요. 내가 겪고 있는 문제는 어느 방이 더 큰지 스크립트에서 말하도록 해야 한다는 것입니다. 스크립트의 끝을 어떻게 재구성하려고 해도 두 가지 응답을 얻습니다. 그 중 하나는 사용자가 운이 좋지 않은 한 잘못된 것입니다. 응답이 없습니다. 올바른 출력을 얻으려면 스크립트의 이 부분을 어떻게 변경합니까? 작업 부분과 제가 질문한 내용을 건너뛰고 싶은 분들을 위해 그에 대한 답변으로 나머지 스크립트를 넣겠습니다. 또한 이것은 내 Unix 입문 과정의 숙제였고 그것을 알아내려고 많은 시간을 소비했기 때문에 수정이 약간 초보자용일 것 같습니다.

    if [ $R1z -ge $R2z]
    then
    echo Room 1 is bigger
    else
    echo Room 2 is bigger
    fi

모든 코드:

    echo Enter the length of room 1
    read R1x
    echo Enter the width of room 1
    read R1y
    echo Enter the length of room 1
    read R2x
    echo Enter the width of room 2
    read R2y
    expr $R1x \* $R1y
    read R1z
    expr $R2x \* $R2y
    read R2z

    if [ $R1z -ge $R2z]
    then
    echo Room 1 is bigger
    else
    echo Room 2 is bigger
    fi

답변1

스크립트를 붙여넣을 때 오타가 있었습니다.

expr $R2x \*$ R2y

읽어야합니다

expr $R2x \* $R2y

또한 상단에 다음을 넣어야 합니다.

#!/bin/bash

올바른 쉘을 사용하여 실행되는지 확인하십시오. 유용한 작업을 수행하지 않으며 expr결과는 R1z 또는 R2z로 다시 읽혀지지 않습니다. 당신이 하고 싶은 일은 다음과 같습니다:

#!/bin/bash
echo Enter the length of room 1
read R1x
echo Enter the width of room 1
read R1y
echo Enter the length of room 1
read R2x
echo Enter the width of room 2
read R2y
R1z=$(expr $R1x \* $R1y)
R2z=$(expr $R2x \* $R2y)

if [ $R1z -ge $R2z ]
then
echo Room 1 is bigger
else
echo Room 2 is bigger
fi

답변2

코드에 오타가 있습니다. 수정된 코드 버전은 다음과 같습니다.

#!/bin/bash

echo Enter the length of room 1
read R1x
echo Enter the width of room 1
read R1y
echo Enter the length of room 2
read R2x
echo Enter the width of room 2
read R2y
expr $R1x \* $R1y
read R1z
expr $R2x \* $R2y
read R2z

if [ $R1z -ge $R2z ];
then
echo Room 1 is bigger
else
echo Room 2 is bigger
fi

구체적으로 이 줄은 다음과 같아야 합니다.

if [ $R1z -ge $R2z ];

예제 실행

방 1:길이 1×폭 2,방 2:3Lx4W

$ ./cmd.bash 
Enter the length of room 1
1
Enter the width of room 1
2
Enter the length of room 2
3
Enter the width of room 2
4
2
2 
12
12
Room 2 is bigger

방 1:세로 4 x ​​너비 3,방 2:길이 2×가로 1

$ ./cmd.bash
Enter the length of room 1
4
Enter the width of room 1
3
Enter the length of room 2
2
Enter the width of room 2
1
12
12
2
2
Room 1 is bigger

답변3

코드에 대한 몇 가지 참고 사항(답변이 있기를 바랍니다):

  • echo매번 사용자에게 메시지를 표시하는 대신 의 스위치를 사용할 수 있습니다 .read-p

    read -p 'Enter the length of Room 1' R1x
    
  • ]$R1z공백 또는 또는 로 구분해야 합니다 $R2z(마지막 매개변수여야 함 [). 게시한 코드가 작동하는 유일한 방법은 $R1z$R2z뒤에 공백이 있는 것입니다.

  • 왜 이렇게 해야 하는지 이해가 안 되네요. read R1z결과는 이렇게 되어야 expr하지 않나요? 나는 그것이 문제의 원인이라고 생각합니다. 대신 $()출력을 캡처하여 완전히 제거 하려고 합니다 .exprR1zread

    R1z="$(expr $R1x \* $R1y)"
    R2z="$(expr $R2x \* $R2y)"
    if [ ... ]
    

관련 정보