在Unix的提示输入两个数字用户进行计算(Prompting a user for two numb

2019-09-27 06:55发布

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

我认为它是这样的:

echo "Please enter the width:"
read width

echo "Please enter the second height"
read height

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

任何帮助将非常感激

Answer 1:

短的:)

#!/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)"

编辑 :补充说明

dc是RPN计算器,做下一个

  • 集精密5
  • 数$ W(如果没有设置1)店“一”
  • 数$ 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

和剧本,

  • <<<是在单线“定界符” - dc将读取它作为从stdin其输入
  • $(commnad)是指:更换$(命令)用命令的结果
  • read xy <<<平均读两个值入变量x和y(在dc返回2个值)


Answer 2:

这取决于你使用的shell。 KSH有浮点算术支持,其他炮弹没有。 在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

如果你正在使用如bash的 ,一种方式是-像史蒂芬指出-使用AWK 。 另一种选择是bc 。 如果你使用bash的 , 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


Answer 3:

#!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
}

谢谢格雷格



文章来源: Prompting a user for two numbers in Unix to make a calculation
标签: shell unix echo