Script está preso dizendo 1 resposta com 2 disponíveis: Matemática relacionada

3

Eu tenho um script que informa ao usuário a metragem quadrada de 2 salas com base na entrada do usuário. Eu acho que tenho essa parte bem feita. O problema que tenho é que eu preciso que o script diga qual sala é maior e não importa como eu tente reconstruir o final do script, recebo as duas respostas, uma das respostas está errada, a menos que o usuário tenha sorte, ou eu não obtém resposta. Como faço para alterar esta parte do script para obter a saída correta? Eu terei o resto do script como uma resposta para aqueles que querem pular a parte de trabalho junto com a pergunta que me foi dada. Também é uma lição de casa da minha classe Intro para Unix que passei muito tempo tentando descobrir, então a correção tem que ser um pouco mais básica para iniciantes.

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

Todo o código:

    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
    
por user52710 20.11.2013 / 04:49

3 respostas

1

Existe um erro de digitação no seu script à medida que você o colou:

expr $R2x \*$ R2y

deve ler

expr $R2x \* $R2y

Você também deve colocar o seguinte no topo:

#!/bin/bash

para garantir que seja executado com o shell correto. Seu expr não faz nada útil, certamente os resultados não são lidos de volta no R1z ou R2z. O que você provavelmente quer fazer é:

#!/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
    
por 20.11.2013 / 05:15
0

Seu código continha alguns erros de digitação. Aqui está uma versão fixa do seu código:

#!/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

Especificamente, essa linha precisa ser assim:

if [ $R1z -ge $R2z ];

Exemplo é executado

Sala 1: 1L x 2W, Sala 2: 3L x 4W

$ ./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

Sala 1: 4L x 3W, Sala 2: 2L x 1W

$ ./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
    
por 20.11.2013 / 06:36
0

Algumas notas no seu código (e esperamos que a resposta):

  • Em vez de echo uma solicitação para o usuário a cada vez, você pode usar a opção read de -p :

    read -p 'Enter the length of Room 1' R1x
    
  • ] precisa ser separado por um espaço de $R1z ou $R2z (deve ser o último argumento para [ ). A única maneira de o código postado funcionar é se $R1z e $R2z tiverem espaços em branco à direita.

  • Eu não entendo porque você precisa de read R1z , deve ser o resultado de expr , não? Eu acho que isso é o que está causando o problema. Em vez disso, você quer que algo como $() capture a saída de expr em R1z e elimine totalmente o read :

    R1z="$(expr $R1x \* $R1y)"
    R2z="$(expr $R2x \* $R2y)"
    if [ ... ]
    
por 20.11.2013 / 06:36