1

我正在编写一个 bash 脚本,它可以从一个非常特定的输入转换单位。

我开始做简单的读取和回显语句,并且能够让它读取从声明的整数和数字派生的非常具体的输入,但我无法让它与 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

另一个改进是重命名变量以表示它们存储的内容。我将替换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 语句需要检查两件事:值的单位是什么,以及我们要将其转换为什么单位。这是一个模板:

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

您可以将Xand替换为您要转换的单位,如果从英寸转换为英尺,则Y中间的代码将类似于。new_value=$(( $value / 12 ))请注意,bash无法处理浮点运算,这是另一个问题的主题。

cwgem 建议的case声明:

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 回答
0

!/bin/bash

echo "输入要转换的数字"

读号

英尺=$(($数字*12))

英寸=$(($number/12))

echo "feet conversion to inches="$feet

echo "inches conversion to feet="$inches

于 2022-02-10T21:55:24.657 回答