我想编写一个脚本,提示用户输入两个数字,以厘米为单位表示矩形的宽度和高度,并以平方厘米和平方英寸为单位输出矩形的面积。在 Unix 中(一英寸 = 2.54 厘米)。
我认为它是这样的:
echo "Please enter the width:"
read width
echo "Please enter the second height"
read height
ANS=`expr width \* height`
echo "$ANS"
任何帮助将非常感激
短一个:)
#!/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
下一步
在“正常”数学中:
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 个值)这取决于您使用的外壳。ksh支持浮点运算,其他 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
如果您正在使用例如bash,一种方法是 - 就像 Steven 指出的那样 - 使用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
#!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
}