1

我想编写一个脚本,提示用户输入两个数字,以厘米为单位表示矩形的宽度和高度,并以平方厘米和平方英寸为单位输出矩形的面积。在 Unix 中(一英寸 = 2.54 厘米)。

我认为它是这样的:

echo "Please enter the width:"
read width

echo "Please enter the second height"
read height

ANS=`expr width \* height`
echo "$ANS"

任何帮助将非常感激

4

3 回答 3

2

短一个:)

#!/bin/bash
read -p "Width  in cm (default 1)? " w
read -p "Height in cm (default 1)? " h
read acm ain <<<$(dc<<<"5k${w:-1}sa${h:-1}sb2.54silalb*sclcli/li/sdlcps.ldps.q")
echo "width: ${w:-1}(cm), height: ${h:-1}(cm) - Area: $acm (sqcm) $ain (sqin)"

编辑:添加说明

RPN计算器,然后进行dc下一步

  • 将精度设置为 5
  • 数字 $w(如果未设置为 1)存储到“a”
  • 数字 $h 存储到“b”
  • 2.54 存储到我
  • 取“a”取“b”并将结果存储乘以“c”
  • 取“c”取“i”除,再取“i”再除,结果存入“d”
  • 取“c”并打印
  • 取“d”并打印
  • 退出

在“正常”数学中:

a=$w; b=$h; i=2.54; c=a*b; d=c/i/i ; print c; print d

和脚本,

  • <<<是单行“heredoc” -dc将其作为标准输入的输入读取
  • $(commnad)意思是:用命令的结果替换 $(command)
  • read x y <<<意味着将两个值读入变量 x 和 y(dc返回 2 个值)
于 2013-05-05T19:24:42.813 回答
1

这取决于您使用的外壳。支持浮点运算,其他 shell 不支持。在ksh您可以执行以下操作:

#!/bin/ksh

typeset -f width height sq_cm sq_in

printf "Please enter the width in cm:  "; read width
printf "Please enter the height in cm: "; read height

((sq_cm = width * height))
((sq_in = sq_cm / 2.54 / 2.54))

echo "Results:"
printf "%.2f sq cm\n" "${sq_cm}"
printf "%.2f sq in\n" "${sq_in}"

示例运行:

$ ./ksh.sh
Please enter the width in cm:  2.5
Please enter the height in cm: 2.5
Results:
6.25 sq cm
0.97 sq in

如果您正在使用例如,一种方法是 - 就像 Steven 指出的那样 - 使用。另一种选择是bc。如果您使用read可以为您打印一个提示,这样您就可以摆脱多余的echo

#!/bin/bash

read -p "Please enter the width in cm:  " width
read -p "Please enter the height in cm: " height

sq_cm="$(echo "scale=3; ${width} * ${height}" | bc)"
sq_in="$(echo "scale=3; ${sq_cm} / 2.54 / 2.54" | bc)"

echo "Results:"
printf "%.2f sq cm\n" "${sq_cm}"
printf "%.2f sq in\n" "${sq_in}"

示例运行:

$ ./bash.sh
Please enter the width in cm:  2.5
Please enter the height in cm: 2.5
Results:
6.25 sq cm
0.97 sq in
于 2013-05-05T17:21:36.977 回答
0
#!awk -f
BEGIN {
  if (ARGC != 3) {
    print "calc.awk WIDTH HEIGHT"
    print "input must be in CM"
    exit
  }
  printf "%s\n%.2f\n%s\n%.2f\n",
    "area square cm",
    ARGV[1] * ARGV[2],
    "area square in",
    ARGV[1] * ARGV[2] / 2.54^2
}

谢谢格雷格

于 2013-05-05T15:31:03.850 回答