华氏、摄氏、开氏(绝对温度)之间转换的脚本


华氏、摄氏、开氏(绝对温度)之间转换的脚本
 
  这个脚本中会出现不同的数学公式。输入的气温可以是华氏、摄氏、开氏(绝对温度)。
代码:
 
01
#!/bin/sh
02
 
03
# convertatemp.sh -- 气温转换脚本
04
# 允许用户输入华氏(F)、摄氏(C)、开氏(K)
05
# 输出会得到另2个计量单位中的等价气温
06
 
07
if [ $# -eq 0 ]; then
08
    cat << EOF >&2  # here document,同学们,熟悉吗? 它是用于脚本中的交互式命令。
09
Usage: `basename $0` temperature[F|C|K]
10
where the suffix:
11
F  indicates input is in Fahrenheit(default)
12
C  indicates input is in Celsius
13
K  indicates input is in Kelvin
14
EOF
15
exit 1
16
fi
17
 
18
# sed -e 's/[-[[:digit:]]*//g'  原书中的unit,经测试,错误,自己修改了下
19
# sed -e 's/[^-[[:digit:]]*//g' 原书中的temp,同上
20
unit="$(echo $1 | sed -e 's/[[:digit:]]*//g' | tr '[:lower:]' '[:upper:]')"  # 得到$1中的字母
21
temp="$(echo $1 | sed -e 's/[^[:digit:]]*//g')"   # 得到$1中的数字
22
 
23
case ${unit:=F} in  # 设置变量默认值的方式
24
    F)  # 华氏转为摄氏的计算公式: Tc = (F - 32) / 1.8
25
    farm="$temp"
26
    cels="$(echo "scale=2;($farm-32)/1.8" | bc)"
27
    kelv="$(echo "scale=2;$cels+273.15" | bc)"
28
    ;;
29
    C)  # 摄氏转华氏: Tf = (9 / 5) * Tc + 32
30
    cels=$temp
31
    kelv="$(echo "scale=2;$cels+273.15" | bc)"
32
    farm="$(echo "scale=2;((9/5)*$cels)+32" | bc)"
33
    ;;
34
    K)  # 摄氏 = 开氏 - 273.15,然后使用摄氏转华氏公式
35
    kelv=$temp
36
    cels="$(echo "scale=2;$kelv-273.15" | bc)"
37
    farm="$(echo "scale=2;((9/5) * $cels)+32" | bc)"
38
esac
39
 
40
echo "Fahrenheit = $farm"
41
echo "Celsius = $cels"
42
echo "Kelvin = $kelv"
43
 
44
exit 0
 
运行脚本: 
虽然在Unix命令行很少用到,但我(本书作者)还是很喜欢这个脚本,因为它的输入有着直观的特性。输入是一个数值,它可以带有表明单位的后缀。 
你以后会在第66个脚本中看到同样的单字母后缀,那个脚本时转换币值。 
运行结果:
 
01
./convertatemp.sh
02
Usage: convertatemp.sh temperature[F|C|K]
03
where the suffix:
04
F  indicates input is in Fahrenheit(default)
05
C  indicates input is in Celsius
06
K  indicates input is in Kelvin
07
 
08
./convertatemp.sh 100c
09
Fahrenheit = 212.00
10
Celsius = 100
11
Kelvin = 373.15
12
 
13
./convertatemp.sh 100k
14
Fahrenheit = -279.67
15
Celsius = -173.15
16
Kelvin = 100
分析脚本:
也可以给脚本加上一个选项。然后可以这样运行:./converatemp.sh -c 100f 这样就可以得到摄氏中等价于华氏100度的气温了。
 

相关内容

    暂无相关文章