脚本卡住说 1 个响应,有 2 个可用:数学相关

脚本卡住说 1 个响应,有 2 个可用:数学相关

我有一个脚本,根据用户输入告诉用户 2 个房间的平方英尺。我想我已经把这部分做得对了。我遇到的问题是,我需要让脚本说出哪个房间更大,无论我如何尝试重建脚本的末尾,我都会得到两个响应,其中 1 个响应是错误的,除非用户幸运,或者我没有得到回应。如何更改脚本的这一部分以获得正确的输出?对于那些想要跳过工作部分以及我提出的问题的人,我将把脚本的其余部分作为对此的答复。另外,这是我的 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

以确保它是使用正确的 shell 执行的。您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号房间:3长×4宽

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

关于您的代码的一些注释(希望有答案):

  • 您可以使用's开关,而不是echo每次都向用户提示:read-p

    read -p 'Enter the length of Room 1' R1x
    
  • ]确实需要用空格与$R1zor分隔$R2z(它必须是 的最后一个参数[)。您发布的代码起作用的唯一方法是 if$R1z$R2z具有尾随空格。

  • 我不明白你为什么需要这样做read R1z,这应该是结果expr,不是吗?我认为这就是造成问题的原因。相反,您想要捕获into$()的输出并完全删除:exprR1zread

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

相关内容