1つの応答、2つの利用可能なスクリプトが停止する:数学関連

1つの応答、2つの利用可能なスクリプトが停止する:数学関連

ユーザー入力に基づいて部屋の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ませんか?問題の原因だと思います。代わりに、$()出力をキャプチャして完全に削除しようとしています。exprR1zread

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

関連情報