我有一个脚本,根据用户输入告诉用户 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
]
确实需要用空格与$R1z
or分隔$R2z
(它必须是 的最后一个参数[
)。您发布的代码起作用的唯一方法是 if$R1z
和$R2z
具有尾随空格。我不明白你为什么需要这样做
read R1z
,这应该是结果expr
,不是吗?我认为这就是造成问题的原因。相反,您想要捕获into$()
的输出并完全删除:expr
R1z
read
R1z="$(expr $R1x \* $R1y)" R2z="$(expr $R2x \* $R2y)" if [ ... ]