shell--计算漏水时长
来源:原创 更新时间:2018-10-01 16:00:32 编辑:jason 浏览:2464
某蓄水池有甲,丙两条进水管和乙,丁两条排水管,要灌满一池水,单开甲需要3个小时,单开丙管需要5小时 ,要排光一池水,单开乙管需要4小时,单开丁管需要6小时,现在池内有1/6池水,如果按照甲乙丙丁的顺序,循环开各水管,每次每管开一小时。问多少时间后水池开始溢水?
· [root@linuxbaodian scripts]# vim bc_water.sh · 1 #!/bin/bash · 2 <<eof · 3 某蓄水池有甲,丙两条进水管和乙,丁两条排水管,要灌满一池水,单开甲需要3个小时,单开丙管需要5小时 · ,要排光一池水,单开乙管需要4小时,单开丁管需要6小时,现在池内有1/6池水,如果按照甲乙丙丁的顺序> · ,循环开各水管,每次每管开一小时。问多少时间后水池开始溢出水? · 4 eof · 5 #define water speed · 6 a=`echo "scale=2;1/3"|bc` · 7 b=`echo "scale=2;1/4"|bc` · 8 c=`echo "scale=2;1/5"|bc` · 9 d=`echo "scale=2;1/6"|bc` · 10 e=`echo "scale=2;1/6"|bc` · 11 #define remaining water · 12 f=`echo "1-$e"|bc` · 13 #define every hour water speed · 14 g=$(echo "$a-$b+$c-$d"|bc) · 15 #define How long does it take to fill up · 16 jg=$(echo "$f/$g"|bc) · 17 #print result · 18 echo $jg · [root@linuxbaodian scripts]# sh bc_water.sh · 7 小时
方法2:
#!/bin/bash export PATH=$PATH . /etc/rc.d/init.d/functions <<EOF 1,首先我们要确定出来这个水池的容量是多大,我们假设水池容量是max 那么max=3*j=5*b=4*y=6*d 甲的流速/分钟 = max/3/60 定义水满为1 定义一个现在水池里面水的容量 MIN=$(echo max / 6 | bc) for j in seq 1 60 MIN=$(echo $max / 180 + MIN | bc ) TIME=$(echo ) meet () { if [ $MIN -eq $max ];then echo $time && exit 0 fi } EOF <<R #定义水满为100 当前的水量定为W 当前经历的时间为TIME分钟 R #定义MIN的预先变量 MIN=$(awk 'BEGIN{printf"%.2f",100/6}') echo $MIN #甲每分钟的流速 lj=$(awk 'BEGIN{printf"%.2f",100/180}') #乙每分钟的流速 ly=$(awk 'BEGIN{printf"%.2f",100/320}') #丙每分钟的流速 lb=$(awk 'BEGIN{printf"%.2f",100/300}') #丁每分钟的流速 ld=$(awk 'BEGIN{printf"%.2f",100/360}') #定义判断水量是否达到1的函数,应为每个循环里面都要重复调用 meet_jia () { TIME=$(expr $TIME + 1) MIN=$(awk 'BEGIN{printf"%.2f","'$MIN'"+"'$1'"}') if [ $(echo "$MIN >= 100" | bc) -eq 1 ];then echo "scale=1;$TIME/60" | bc && break 2 fi } meet_jian () { TIME=$(expr $TIME + 1) MIN=$(awk 'BEGIN{printf"%.2f","'$MIN'"-"'$1'"}') if [ $(echo "$MIN >= 100" | bc) -eq 1 ];then echo "scale=1;$TIME / 60" | bc && break 2 fi } for ((a=1 ; a<2; a--)) do for i in `seq 60` do meet_jia $lj done for i in `seq 60` do meet_jian $ly done for i in `seq 60` do meet_jia $lb done for i in `seq 60` do meet_jian $ld done done