我正在编写一个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语句中输入什么而不会出现“找不到命令”之类的错误。
任何帮助将不胜感激。谢谢。
答案 0 :(得分: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
您可以将X
和Y
替换为要转换的单位,以及
中间的代码类似new_value=$(( $value / 12 ))
,如果
从英寸转换为英尺。请注意bash
无法处理浮点运算,
这是另一个问题的主题。
case
语句,如cwgem所示:
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