ユーザー入力に基づいて部屋の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
正しいシェルを使用して実行されていることを確認してください。役に立つ操作は行われず、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×幅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
ませんか?問題の原因だと思います。代わりに、$()
出力をキャプチャして完全に削除しようとしています。expr
R1z
read
R1z="$(expr $R1x \* $R1y)" R2z="$(expr $R2x \* $R2y)" if [ ... ]