1

非常に具体的な入力から単位を変換する bash スクリプトを作成しています。

私は単純な read および echo ステートメントを実行し始め、宣言された整数と数値から派生した非常に具体的な入力を読み取ることができましたが、if ステートメントで動作させるのに問題があります。

これまでの私の簡単なコードは次のとおりです。

#!/bin/bash

declare -i n
in=inches
ft=feet

read number in "as" feet
if [ ]; then
    echo "$n $in = $[n/12] $ft"
fi

私が今やりたいことは、ユーザー入力に依存する多数の条件に従って流れる if/else ステートメントを作成することです。したがって、ユーザーに「フィートとして 24 インチ」または「インチとして 50 ヤード」などと入力して、それぞれの出力を実行してもらいたいのです。今のところ、「コマンドが見つかりません」などのエラーが発生することなく、if ステートメントに何を入力すればよいかわかりません。

どんな助けでも大歓迎です。ありがとうございました。

4

2 に答える 2

2

まず、コマンドの変数に引用符を使用しないでくださいread

read number in as feet

もう 1 つの改善点は、変数の名前を変数が格納するものを表すように変更することです。有効ではあるが「読めない」名前であるアンダースコアに置き換えasます。これは、それが単なるプレースホルダーであり、その値はあまり気にしないことを強調しています。

read value src_unit _ dest_unit
# If the user enters "24 inches as feet", we have:
#  value=24
#  src_unit=inches
#  _=as
#  dest_unit=feet

ここで、if ステートメントで 2 つのことを確認する必要があります。値の単位と、それを変換する単位です。テンプレートは次のとおりです。

if [ "$src_unit" = X ] && [ "$dest_unit" = Y ]; then
   # Convert X into Y
fi

Xとを変換元および変換先の単位に置き換えます。インチからフィートに変換する場合Y、真ん中のコードは のようになります。別の質問のトピックである浮動小数点演算を処理できないことnew_value=$(( $value / 12 ))に注意してください。bash

casecwgem によって提案されたステートメント:

case "$src_unit-$dest_unit" in
    inches-feet)
      new_value=$(( $value / 12 ))
      ;;
    gallons-quarts)
      new_value=$(( $value * 4 ))
      ;;
    *)  echo "I don't know how to convert $src_unit to $dest_unit"
      ;;
esac
于 2013-03-07T19:59:10.377 に答える